JavaCompiler无法在Jar中工作

时间:2012-03-12 14:28:39

标签: java eclipse compiler-construction build jar

我有一个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");
}

2 个答案:

答案 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非常大,可能无法接受部署。如果是这样,你可以考虑该文章中描述的其他选项。