Ich habe sun-java6-jdk
und 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.jar
Datei finden, und selbst das Übergeben der -cp /usr/lib/jvm/java-6-sun-1.6.0.26/jdk/lib/tools.jar
Option hilft nicht. Wir hoffen, dass uns jemand erklären kann, wie wir richtig auf die Datei zugreifen können, damit wir die Methode tools.jar
korrekt 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.jar
in das jre/lib/ext
Verzeichnis 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 -cp
Option tun (habe es versucht und es ist fehlgeschlagen) oder über eine Umgebungsvariable (habe das auch versucht und es ist auch fehlgeschlagen).