我试图使用JavaCompiler进行类:ToolProvider.getSystemJavaCompiler()返回null - 仅在安装了JRE的情况下可用?
当我打电话ToolProvider.getSystemJavaCompiler()返回null。
我认为这是因为我使用的是JRE而不是JDK。
问题是我希望它能够在所有平台上运行,而不管用户使用JRE还是JDK的天气。
如果有人知道如何解决这个问题,或者使用其他方法请评论。
任何帮助,将不胜感激。
我试图使用JavaCompiler进行类:ToolProvider.getSystemJavaCompiler()返回null - 仅在安装了JRE的情况下可用?
当我打电话ToolProvider.getSystemJavaCompiler()返回null。
我认为这是因为我使用的是JRE而不是JDK。
问题是我希望它能够在所有平台上运行,而不管用户使用JRE还是JDK的天气。
如果有人知道如何解决这个问题,或者使用其他方法请评论。
任何帮助,将不胜感激。
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");
@ PSR-实际上我不是明确指定java.exe的版本,我只是显示了JDK的路径......并且这样做肯定会起作用。 – 2013-11-29 06:44:40
这里是如何运行你的应用程序的Java编译器时,有没有安装JDK。
首先,从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);
另一个解决方案是从: - http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7181951
在JDK_HOME/lib中复制的tools.jar /成JRE_HOME/LIB /。 至少对我来说,它神奇地解决了我的问题!
(我没有什么建议同上。我只是复制它。)
这里是简单的解决方案,为我工作
我只是改变了JRE系统库..... Program Files文件\ Java \ jdk1.7.0_55 \ jre而不是.... Program Files \ Java \ jdk1.7.0_55 \ bin,它为我工作。
只需复制工具。从/ lib下的jar文件 它的工作原理
您可以通过的System.out.println(System.getProperty( “java.home”))
多数时候就像 Ç获得:\ Program Files文件\ Java \ jre(版本)[用于windows]
您可能需要JDK才能像编译器一样使用_development_工具...只是一个猜测。 – jahroy 2013-03-20 00:56:00
小心标题。这个问题与“Java编译器不工作”无关。 – 2013-03-20 01:03:53
我认为你应该通过@nneonneo提出问题。他(或其他人)很有可能会提出一种不同的方法(如果他们知道你想做什么)。否则,我们可以告诉你,你目前的方法将**不工作。 – jahroy 2013-03-20 01:05:16