4

私はJavaが初めてで、このチュートリアルは非常に有益であり、すべてを詳細に説明しているため、このチュートリアルに従っています。チュートリアルの最後で、JavaFileManager を使用して複数の Java ファイルをコンパイルする方法を説明し、その例をいくつか示しますが、まだ複数のファイルを自分でコンパイルすることはできません。

もう1つの問題は、この例では1つのJavaファイルをコンパイルする方法しか示していないことです(すでに動作しています)が、複数のファイルで構成されたプロジェクトをコンパイルできるようにしたいので、問題が発生しています自分のシステムの複数の Java クラス

これは私が今持っているものです:

public static void main(String[] args) throws Exception {
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    // Line 1.
    MyDiagnosticListener listener = new MyDiagnosticListener(); // Line 2.
    StandardJavaFileManager fileManager = compiler.getStandardFileManager(
            listener, null, null); // Line 3.
    String fileToCompile = "test" + File.separator + "ManyErrors.java";
    // Line 4
    Iterable fileObjects = fileManager.getJavaFileObjectsFromStrings(Arrays
            .asList(fileToCompile)); // Line 5
    CompilationTask task = compiler.getTask(null, fileManager, listener,
            null, null, fileObjects); // Line 6
    Boolean result = task.call(); // Line 7
    if (result == true) {
        System.out.println("Compilation has succeeded");
    }
}


class MyDiagnosticListener implements DiagnosticListener {
public void report(Diagnostic diagnostic) {
    System.out.println("Code->" + diagnostic.getCode());
    System.out.println("Column Number->" + diagnostic.getColumnNumber());
    System.out.println("End Position->" + diagnostic.getEndPosition());
    System.out.println("Kind->" + diagnostic.getKind());
    System.out.println("Line Number->" + diagnostic.getLineNumber());
    System.out.println("Message->" + diagnostic.getMessage(Locale.ENGLISH));
    System.out.println("Position->" + diagnostic.getPosition());
    System.out.println("Source" + diagnostic.getSource());
    System.out.println("Start Position->" + diagnostic.getStartPosition());
    System.out.println("\n");
}
4

1 に答える 1

2

getJavaFileObjectsFromStrings fromStandardJavaFileManagerIterable<String>.

これは、文字列の反復可能なコレクションを渡すだけで を取得できることを意味します。これは、インターフェイスを実装する任意のクラスのgetTask メソッドIterable<? extends JavaFileObject>に渡されます。JavaCompiler


これは答えとは関係ありませんが、あなたの目標がJavaに慣れることである場合、おそらく間違った道を進んでいることを付け加えたいと思います。Java クラスの手続き型コンパイルはかなり高度なトピックであり、投稿したコードを完全に理解していないようです。質問に対する答えがその中にあるためです。Arrays.asList(fileToCompile)呼び出しは、正確に 1 つの文字列を含む文字列の配列を作成します。getJavaFileObjectsFromStringsドキュメントがなくても、ファイル名に対応する文字列の配列を取ることは簡単に推測できるはずです。したがって、私はその道をたどろうとはしませんでしたが、むしろ、最初に Java のドキュメントとより単純な概念に慣れることができました。特にオブジェクト指向の概念に慣れていない場合。

于 2012-06-07T17:07:06.130 に答える