簡體   English   中英

使用JavaCompiler包獲取在另一個Java類中編譯Java源文件的結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM