Я попытался найти способ скомпилировать класс на лету, и у меня есть, как создать скомпилированный экземпляр класса. Однако я хочу, чтобы создать исполняемый файл .class. Как я, если возможно, смогу вывести объект Class в файл .class. Если это неверно, объясните, как я смогу это сделать.Как напечатать объект java.lang.Class в файл?
1
A
ответ
0
Нельзя. Вместо этого сделайте исполняемую банку.
Есть другие варианты, как указано here, если вы чувствуете, и исполняемый фляга не то, что вам нужно.
0
Эта страница http://www.accordess.com/wpblog/an-overview-of-java-compilation-api-jsr-199/ описывает процесс компиляции Java-кода из строки, создавая файл .class. Ниже приведена сокращенная версия кода, прокомментированного иначе.
public class CompilerAPITest {
final Logger logger = Logger.getLogger(CompilerAPITest.class.getName()) ;
/** Java source code to be compiled dynamically */
static String sourceCode = "package com.accordess.ca;" +
"class DynamicCompilationHelloWorld{" +
"public static void main (String args[]){" +
"System.out.println (\"Hello, dynamic compilation world!\");" +
"}" +
"}" ;
/* Object initialization and compilation. */
public void doCompilation(){
SimpleJavaFileObject fileObject = new DynamicJavaSourceCodeObject ("com.accordess.ca.DynamicCompilationHelloWorld", sourceCode) ;
JavaFileObject javaFileObjects[] = new JavaFileObject[]{fileObject} ;
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager stdFileManager = compiler.getStandardFileManager(null, Locale.getDefault(), null);
Iterable<? extends JavaFileObject> compilationUnits = Arrays.asList(javaFileObjects);
//This example places the output files under bin folder.
String[] compileOptions = new String[]{"-d", "bin"} ;
Iterable<String> compilationOptions = Arrays.asList(compileOptions);
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
CompilationTask compilerTask = compiler.getTask(null, stdFileManager, diagnostics, compilationOptions, null, compilationUnits) ;
boolean status = compilerTask.call();
if (!status){//If compilation error occurs
for (Diagnostic diagnostic : diagnostics.getDiagnostics()){
System.out.format("Error on line %d in %s", diagnostic.getLineNumber(), diagnostic);
}
}
try {
stdFileManager.close() ;//Close the file manager
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String args[]){
new CompilerAPITest().doCompilation() ;
}
}
class DynamicJavaSourceCodeObject extends SimpleJavaFileObject{
private String qualifiedName ;
private String sourceCode ;
protected DynamicJavaSourceCodeObject(String name, String code) {
super(URI.create("string:///" +name.replaceAll("\\.", "/") + Kind.SOURCE.extension), Kind.SOURCE);
this.qualifiedName = name ;
this.sourceCode = code ;
}
@Override
public CharSequence getCharContent(boolean ignoreEncodingErrors)
throws IOException {
return sourceCode ;
}
// ... getters and setters
}
Смежные вопросы
- 1. Что такое объект класса (java.lang.Class)?
- 2. Как напечатать объект-объект?
- 3. Как создать объект из значения java.lang.Class?
- 4. Как напечатать объект MyList?
- 5. Как напечатать объект html
- 6. Как напечатать объект (StdClass)
- 7. Как напечатать объект "JSON"
- 8. Как напечатать объект в Python
- 9. Как напечатать текстовый файл
- 10. Как напечатать «\ г» в файл
- 11. Как напечатать объект Z3 Set?
- 12. Как напечатать объект неизвестного типа
- 13. Как напечатать объект Node JS
- 14. Как напечатать заданный объект генератора?
- 15. Как напечатать объект/массив jquery
- 16. Как напечатать объект списка python?
- 17. Как напечатать питона объект OpenStack, как JSON
- 18. Как создать java.io.File в java.lang.Class для запуска?
- 19. Как напечатать объект в связанном списке?
- 20. Как напечатать защищенный объект в php
- 21. Как напечатать объект несколько раз в Java?
- 22. Как я могу напечатать объект в недоступном?
- 23. Vala: Как напечатать объект в stdout
- 24. Как напечатать файл, содержащий список
- 25. java.lang.Class: ошибка при инициализации, свойства log4j файл в Java программы
- 26. Сравнение объектов java.lang.Class и javax.lang.model.element.TypeElement
- 27. Как напечатать & (амперсанд) символа в файл свойствах
- 28. Как напечатать файл в RestFull + Oauth
- 29. Как напечатать трассировки стека в файл журнала
- 30. Как напечатать текстовый файл в WPF
вы можете быть немного ясно, я извиняюсь, но я не понимаю, вопрос – Satya
Что вы на самом деле подразумевают под «создать файл класса, который является исполняемым»? ОС не запускается непосредственно из файлов классов - запускается JVM, а затем вызывает основной метод для данного класса. –
Файлы классов уже исполняются с помощью команды 'java'. Какова ваша проблема? Ввод этой длинной команды 'java' каждый раз? Просто создайте файл '.bat' или' .sh', в который вы введете эту полную команду. – BalusC