2

リフレクションを使用して、新しく作成された Java クラスのすべてのメソッドを取得したいと考えています。以下のように、別のファイルからコピーして Java クラスを作成し、JavaCompiler を使用して新しく作成した Java をコンパイルします。しかし、なぜターゲット クラス ファイルが作成されなかったのかはわかりません。PS: 間違ったソース ターゲット Java ファイル パスを指定すると、"javac: cannot find file: codeGenerator/Service.java". 皆さん、ありがとうございました。

private static Method[] createClassAndGetMethods(String sourceFilePath) throws IOException {
    File targetFile = new File("Service.java");
    File sourceFile = new File(sourceFilePath);
    Files.copy(sourceFile, targetFile);

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    compiler.run(null, null, null, targetFile);
    Thread.sleep(5000);

    //After the Service.java compiled, use the class getDeclaredMethods() method.
    Method[] declaredMethods = Service.class.getDeclaredMethods();
    return declaredMethods;
}

コンパイル方法:

        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        compiler.run(null, null, null, targetFile);
4

2 に答える 2

0
public static void compile(String sourceFilePath, String classPath) throws IOException {
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
    Iterable sourcefiles = fileManager.getJavaFileObjects(sourceFilePath);
    Iterable<String> options = Arrays.asList("-d", classPath);
    compiler.getTask(null, fileManager, null, options, null, sourcefiles).call();
    fileManager.close();
}

最後に、上記の方法でターゲット Service.java を正常にコンパイルしました。皆さん、ありがとうございました。

于 2016-05-11T07:52:35.447 に答える