Sun-Java-6 在尋找tools.jar時出現不正確的classpath/java.home問題

Sun-Java-6 在尋找tools.jar時出現不正確的classpath/java.home問題

我為在 Ubuntu 11.04 伺服器發行版上運行的專案安裝了sun-java6-jdksun-java6-jre(以及可能的其他相關 java6 軟體包,例如字體)。我們的專案以程式設計方式從正在運行的可執行檔中呼叫 Javadoc。為此,我們顯然需要知道 tools.jar 檔案的位置,該檔案是 JDK 發行版的一部分,而不是 JRE 發行版的一部分。軟體包被安裝到/usr/lib/jvm/java-6-sun-1.6.0.26/兩個區域(JDK/JRE)下,有 bin 和其他目錄,它們提供各種標準二進位。

每當我們執行 java 程式(透過 java 二進位)時,內部 java.home 變數似乎會覆寫提供的任何 JAVA_HOME 環境變數。我們得出的結論是,二進位檔案從二進位檔案的路徑中派生出其 java.home。 jdk下的java二進位檔案其實是jre版本的連結。因此,無論您「執行」哪一個,您總是會獲得 jre 版本,因此 java.home 目錄被定義為/usr/lib/jvm/java-6-sun-1.6.0.26/jre.

因此,任何正在運行的可執行文件似乎都無法找到該tools.jar文件,甚至傳遞該-cp /usr/lib/jvm/java-6-sun-1.6.0.26/jdk/lib/tools.jar選項也無濟於事。我們希望有人可以幫助闡明我們如何正確存取該tools.jar文件,使我們能夠正確地呼叫該com.sun.tools.javadoc.Main.execute方法。

執行範例:

java -cp /usr/lib/jvm/java-6-sun/lib/tools.jar -jar comtor.jar -sourcepath .

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javadoc/Main
    at comtor.Comtor.main(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.sun.tools.javadoc.Main
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 1 more

答案1

嗯,這是一個 hack,但我們最終將tools.jar檔案複製到目錄中jre/lib/ext,就像我們安裝第 3 方 jar 檔案作為擴充一樣。這似乎是一種不自然的行為,我們應該透過選項-cp(嘗試過但失敗)或透過環境變數(也嘗試過但也失敗)在命令列上執行某些操作。

相關內容