0

私はここで非常に厄介な状況にいます。.java ファイルを .class ファイル (または jar ファイル) に「コンパイル」する必要がある「Eclipse プラグイン」を開発しています。

次のようなことを行うために、 Java Compiler APIを使用しようとしています。

public class Compiler {
    private  JavaCompiler _javaCompiler;
    private  StandardJavaFileManager _sjfm = null;
    private   Files[] _filesIn;

    public Compiler()
    {
        _javaCompiler = ToolProvider.getSystemJavaCompiler();
        _sjfm =  _javaCompiler.getStandardFileManager(null, null, null);
    }

    public  void CompileFiles(ArrayList<String> strings, String outputFolder)
    {
        //_javaCompiler.run
        Iterable fileObject = _sjfm.getJavaFileObjectsFromStrings(strings);
        String[] options = new String[]{"-d", outputFolder};
        _javaCompiler.getTask(null, null, null, Arrays.asList(options), null, fileObject).call();
        try {
            _sjfm.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

問題は、呼び出す_sjfm = _javaCompiler.getStandardFileManager(null, null, null);と NullPointerException が発生することです。これは、JDK を実行していないときに「予期される」動作であるためです (このバグ レポートを参照してください) 。

このStackOverflow の投稿は何らかの形で私を助けてくれましたが、発行可能でなければならない Eclipse プラグイン内から Java ファイルをコンパイルする正しい方法は何でしょうか?

  1. 代替の「コンパイラ」を使用し、jar を含めて使用するだけですか?
  2. tools.jar (JDK フォルダーにあります) をプラグインに含め、動的にロードし、そこからコンパイルしますか?
  3. 私が考えることができない他の解決策

あなたは何をお勧めします ?

4

1 に答える 1

1

http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.jdt.doc.isv%2Fguide%2Fjdt_api_compile.htmで説明されているように、Eclipse JDT コンパイラを使用できます。

于 2013-06-07T06:07:03.710 に答える