私はここで非常に厄介な状況にいます。.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 ファイルをコンパイルする正しい方法は何でしょうか?
- 代替の「コンパイラ」を使用し、jar を含めて使用するだけですか?
- tools.jar (JDK フォルダーにあります) をプラグインに含め、動的にロードし、そこからコンパイルしますか?
- 私が考えることができない他の解決策
あなたは何をお勧めします ?