1

クラス内に次の (単純化された) コードがあり、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 の結果を取得する方法、このコンパイルされたコードを実行する方法を教えてください。

4

2 に答える 2

0

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 として使用することです。

于 2014-01-25T21:55:36.770 に答える
0
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 のような結果変数のさまざまな値を参照してください コンパイルされているかどうかに関係なく、コンパイル状態を表示します

于 2012-11-20T12:38:35.003 に答える