JavaCompiler 无法在 Jar 中工作

问题描述 投票:0回答:2

我有一个java程序,它使用JavaCompiler来生成新的类文件。

我在 eclipse 中使用 jdk 1.6,效果很好。

但是当我将其导出为 jar 文件并且不想编译一些 .java 文件时,它会给我一个 null 错误(因为系统中没有使用 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");
}
java eclipse build jar java-compiler-api
2个回答
2
投票

这将帮助您--> http://weblogs.java.net/blog/kirillcool/archive/2005/05/using_java_comp.html 查找“...以常规独立方式编译 Java 源文件的标准技术”应用程序是使用驻留在jdk/lib下的tools.jar ...”


1
投票

您应该找到 JavaCompiler 的实现来自哪里(我猜测来自 JDK 的 tools.jar),然后您可以将其包含在您的类路径中。 正如 @Chuck 在他的回答中链接的文章所示,该 jar 非常大,部署可能无法接受。 如果是这样,您可能需要考虑该文章中描述的其他选项。

© www.soinside.com 2019 - 2024. All rights reserved.