Sun-Java-6: Falscher Klassenpfad/Java.home – Probleme beim Suchen von Tools.jar

Sun-Java-6: Falscher Klassenpfad/Java.home – Probleme beim Suchen von Tools.jar

Ich habe sun-java6-jdkund sun-java6-jre(und wahrscheinlich auch andere verwandte Java6-Pakete wie Schriftarten) für ein Projekt installiert, das auf einer Ubuntu 11.04-Serverdistribution läuft. Unser Projekt ruft Javadoc programmgesteuert aus unserer laufenden ausführbaren Datei auf. Dazu müssen wir natürlich den Speicherort der Datei tools.jar kennen, die Teil der JDK-Distribution ist, aber nicht der JRE-Distribution. Die Pakete wurden in installiert /usr/lib/jvm/java-6-sun-1.6.0.26/und es gibt bin und andere Verzeichnisse unter den beiden Bereichen (JDK/JRE), die die verschiedenen Standardbinärdateien bereitstellen.

Immer wenn wir ein Java-Programm ausführen (über die Java-Binärdatei), scheint die interne Variable java.home jede bereitgestellte JAVA_HOME-Umgebungsvariable zu überschreiben. Wir sind zu dem Schluss gekommen, dass die Binärdatei ihr java.home daher aus dem Pfad der Binärdatei ableitet. Die Java-Binärdatei unter dem JDK ist tatsächlich ein Link zur JRE-Version. Unabhängig davon, welche Sie „ausführen“, erhalten Sie daher immer die JRE-Version, und daher ist das Verzeichnis java.home wie folgt definiert /usr/lib/jvm/java-6-sun-1.6.0.26/jre.

Daher kann keine laufende ausführbare Datei die tools.jarDatei finden, und selbst das Übergeben der -cp /usr/lib/jvm/java-6-sun-1.6.0.26/jdk/lib/tools.jarOption hilft nicht. Wir hoffen, dass uns jemand erklären kann, wie wir richtig auf die Datei zugreifen können, damit wir die Methode tools.jarkorrekt aufrufen können .com.sun.tools.javadoc.Main.execute

Beispielausführung:

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

Antwort1

Nun, es ist ein Hack, aber wir haben die Datei letztendlich tools.jarin das jre/lib/extVerzeichnis kopiert, als ob wir eine JAR-Datei eines Drittanbieters als Erweiterung installieren würden. Dies scheint eine unnatürliche Aktion zu sein und wir sollten etwas auf der Befehlszeile über die -cpOption tun (habe es versucht und es ist fehlgeschlagen) oder über eine Umgebungsvariable (habe das auch versucht und es ist auch fehlgeschlagen).

verwandte Informationen