1

1 つの Java ファイルを任意の数のクラス ファイルにコンパイルできるため、コンパイラ API からどのクラス ファイルが生成されたかを調べる方法はありますか? 他のファイルが含まれている可能性のあるディレクトリに出力しているので、それを見ることはできません。

4

3 に答える 3

3

動作するように見えるものを見つけました。*FileManager には、出力対象を含む、対象の場所を取得するためのコールバックがあります。ForwardingJavaFileManager を使用してラップし、オーバーライドして、呼び出しからの値を保存できます。

final List<String> classFiles = new ArrayList<>();
StandardJavaFileManager inner = compiler.getStandardFileManager(null, null, null);
JavaFileManager fileManager = new ForwardingJavaFileManager(inner) {
    @Override
    public JavaFileObject getJavaFileForOutput(Location location, String className,
                JavaFileObject.Kind kind, FileObject sibling) throws IOException {
        JavaFileObject o = super.getJavaFileForOutput(location, className, kind, sibling);
        classFiles.add(o.getName());
        return o;
    }
};
于 2012-10-12T21:26:18.887 に答える
0

javax.toolsパッケージには、コンパイル単位を管理するいくつかの方法が示されています。

JavaFileObjectまたはJavaFileManagerを参照してください。

于 2012-10-12T18:33:30.777 に答える
0

指定された参照のいずれかを使用して、Java Compiler API によって作成された非パブリック クラスを見つけることができないと思います。使用可能なクラス名を識別するには、入力 Java ファイルを解析 (または reg 式を適用) する必要があります。クラスの名前を取得したら、カスタム クラス ローダーを使用してそれらをロードできるはずです。

サシーシュ

于 2012-10-12T18:51:50.823 に答える