我有一个java程序,它使用JavaCompiler生成新的类文件。
我在eclipse中使用jdk 1.6,这很好用。
但是当我将其导出为jar文件而不想编译一些.java文件时,它会给我一个空错误(因为系统中没有编译器使用jre?)。 有没有办法在jar文件中提供编译器?
File fRun = new File("someFile.java");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
Iterable<String> options = Arrays.asList( new String[] { "-d", currentDir+"\\bin\\"} );
Iterable<? extends JavaFileObject> compUnits = fileManager.getJavaFileObjects(fRun);
Boolean compRes = compiler.getTask(null, fileManager, null, options, null, compUnits).call();
if(compRes == true){
System.out.println("Compilation has succeeded");
fileManager.close();
ClassLoader cl = Thread.currentThread().getContextClassLoader();
Class<?> compiledClass = cl.loadClass(someFile);
cRun = compiledClass;
}else{
System.out.println("Compilation error");
fileManager.close();
throw new Exception("Compilation Error");
}
答案 0 :(得分:2)
这会对你有所帮助 - &gt; http://weblogs.java.net/blog/kirillcool/archive/2005/05/using_java_comp.html寻找“...在常规独立应用程序中编译Java源文件的标准技术是使用驻留在jdk / lib下的tools.jar ......”
答案 1 :(得分:1)
你应该找到JavaCompiler的实现来自哪里(我猜JDK中的tools.jar),然后你可以在你的类路径中包含它。正如@Chuck在他的回答中链接的文章所示,该jar非常大,可能无法接受部署。如果是这样,你可以考虑该文章中描述的其他选项。