我試圖使用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