我正在尝试使用 JavaCompiler 类:
当我调用 ToolProvider.getSystemJavaCompiler()时,它返回null。
我认为这是因为我使用的是JRE而不是JDK。
问题是我希望它在所有平台上运行,无论用户使用JRE还是JDK的天气如何。
如果有人知道如何解决这个问题,或者使用其他方法请注释。
任何帮助都将不胜感激。
答案 0 :(得分:9)
ToolProvider.getSystemJavaCompiler()不可用。
类路径中是否缺少tools.jar?
Set class path to the tools.jar
文件,可以在jdk \ jre目录中找到。
System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_02");
答案 1 :(得分:5)
以下是在没有安装JDK时如何从应用程序运行Java编译器。
首先,使用Java应用程序包含JDK中的tools.jar文件,并将tools.jar放在类路径中。甲骨文可能不会像你那样做。但是,有合法的解决方法。您可以从openjdk.org(openjdk),RedHat(IcedTea)或Azul Systems(Zulu)提供的免费JDK中获取tools.jar文件。
接下来,不是使用ToolProvider.getSystemJavaCompiler()和JavaCompiler类,而是直接调用tools.jar中的编译器。下面是代码片段:
String classpath = ...; // make sure tools.jar is in this path
String sourcepath = ...; // path to your sources
String putputpath = ...; // directory for generated class files
String filepath = ...; // file path the file you want to compile
String[] args = new String[] {
"-classpath", classpath,
"-sourcepath", sourcepath,
"-d", putputpath,
filePath
};
com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main();
int compileStatus = javac.compile(args);
答案 2 :(得分:4)
答案 3 :(得分:3)
只需将/ lib中的tools.jar文件复制到 它的工作原理
您可以通过System.out.println获取(System.getProperty(" java.home"))
大部分时间都是这样的 C:\ Program files \ Java \ jre(version)[for windows]
答案 4 :(得分:1)
另一种解决方案来自: - http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7181951
将JDK_HOME / lib /中的tools.jar复制到JRE_HOME / lib /中。 至少在我看来,它神奇地解决了我的问题!
(我上面没有做任何建议。我只是把它复制到那里。)
答案 5 :(得分:0)
这是一个适合我的简单解决方案
我刚刚将jre系统库更改为..... Program Files \ Java \ jdk1.7.0_55 \ jre而不是.... Program Files \ Java \ jdk1.7.0_55 \ bin,它对我有用。
答案 6 :(得分:0)
在Mac上,这对我有用:
System.setProperty("java.home", "/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home");
javax.tools.JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
(由于某种原因,它不适用于idk 10。)
答案 7 :(得分:0)
我的buildPath中同时包含了JRE和JDK ...我刚刚删除了JRE并将其修复。