最近,我在类似情况下使用了ToolProvider: javax.tools.ToolProvider.getSystemJavaCompiler()
例:
protected static boolean compileFiles(List additionalOptions,ArrayList sources){
JavaCompiler compiler=ToolProvider.getSystemJavaCompiler();
if (compiler == null) return false;
StandardJavaFileManager fileManager=compiler.getStandardFileManager(null,null,null);
List options=new ArrayList();
options.add("-d");
options.add(getOutBuildDir().getAbsolutePath());
options.add("-s");
options.add(getOutSrcDir().getAbsolutePath());
options.add("-verbose");
if (additionalOptions != null) options.addAll(additionalOptions);
Iterable extends JavaFileObject> compilationUnits=fileManager.getJavaFileObjectsFromStrings(sources);
CompilationTask task=compiler.getTask(mOutputWriter,fileManager,null,options,null,compilationUnits);
return task.call();
}
在运行时进行编译的另一种方法是使用JIMCy库( https://github.com/Krever/JIMCy )进行内存编译。 它实际上是用Scala编写的,但是具有Java API。