[英]Get result of compiling a Java source file, within another Java class, using JavaCompiler package
我在類內有以下(簡化)代碼,該代碼調用Java編譯器來處理給定的源文件:
package test;
import javax.tools.*;
public class SimpleCompileTest {
public static void main(String[] args) {
String fileToCompile = "MyClass.java";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int compilationResult = compiler.run(null, null, null, fileToCompile);
if(compilationResult == 0){
System.out.println("Compilation is successful");
} else {
System.out.println("Compilation Failed");
}
}
}
編譯成功,但是現在我如何獲得MyClass.java的結果,以及如何運行此編譯的代碼。
package javacompiler;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
public class COmpilerHello {
public static void main(String[] args)
{
String s="C:/Users/MariaHussain/Desktop/hussi.java";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int result = compiler.run(System.in,System.out,System.err,s);
System.out.println("Compile result code = " + result);
}
}
參見結果變量的各種值,例如0,1 2顯示編譯狀態,無論是否已編譯
獲取JavaFileManager,設置位置以保存.class文件,然后通過(自定義)類加載器加載它:
StandardJavaFileManager stdFileManager = compiler.getStandardFileManager(null, Locale.getDefault(), null);
stdFileManager.setLocation(StandardLocation.CLASS_OUTPUT, Arrays.asList(new File("classDir")));
+ custom classloader
還是不存儲: 來自JDK 1.6的JavaCompiler:如何將類字節直接寫到byte []數組?
您指向的位置: https : //weblogs.java.net/blog/2008/12/17/how-compile-fly
主要思想是使用自定義MemoryFileManager作為JavaFileManager。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.