Java 6 での私の動的コンパイルは完全に機能しています。ただし、出力パスを変更したいと思います。私はたくさんのことを試しました(私はあなたを惜しみません)無駄にしました。とにかく、ここに作業コードがあります
String[] filesToCompile = { "testFiles/Something.java" };
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjects(filesToCompile);
CompilationTask task = compiler.getTask(null, fileManager, null,null, null, compilationUnits);
System.out.println("Good? " + task.call());
しかし、出力はソースディレクトリに送られますが、これは私が望むものではありません。
答えは にあるのではないかと思いcompiler.getTask
ますが、API はいくつかのパラメーターが何を意味するかについてあまり明確ではありません。または、おそらくfileManagerの何か。私はもう試した
fileManager.setLocation(StandardLocation.locationFor("testFiles2"), null);
繰り返しますが、推測はおそらく良い考えではありません。
ありがとう!
編集:私もこのようにオプションを使ってみました(もっとコンパクトな方法があればごめんなさい):
final List<String> optionsList = new ArrayList<String>();
optionsList.add("-d what");
Iterable<String> options = new Iterable<String>() {
public Iterator<String> iterator() {
return optionsList.iterator();
}
};
オプションを getTask に渡しますが、エラー メッセージは「Invalid Flag」です。