获取使用 JavaCompiler 包在另一个 Java 类中编译 Java 源文件的结果



我的类中有以下(简化的)代码,它调用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

其中主要思想是使用自定义内存文件管理器作为JavaFileManager。

相关内容

  • 没有找到相关文章

最新更新