Vraag Sun-Java-6 Onjuiste classpath / java.home problemen bij het vinden van tools.jar


ik installeerde sun-java6-jdk en sun-java6-jre (en waarschijnlijk andere gerelateerde java6-pakketten zoals lettertypen) voor een project dat wordt uitgevoerd op een Ubuntu 11.04-serverdistributie. Ons project roept Javadoc programmatisch aan vanuit ons lopende uitvoerbare bestand. Om dit te doen, moeten we uiteraard weten waar het tool.jar-bestand zich bevindt, dat deel uitmaakt van de JDK-distributie, maar niet de JRE-distributie. De pakketten zijn geïnstalleerd in /usr/lib/jvm/java-6-sun-1.6.0.26/ en er zijn bin en andere mappen onder de twee gebieden (JDK / JRE) die de verschillende standaard binaries verschaffen.

Telkens wanneer we een java-programma uitvoeren (via het java-binaire bestand), lijkt de interne java.home-variabele elke JAVA_HOME-omgevingsvariabele te overschrijven. We hebben geconcludeerd dat het binaire dus zijn java.home afgeleid van het pad van het binaire getal. Het java binary onder de jdk is echt een link naar de jre-versie. Dus, ongeacht welke je uitvoert, je krijgt altijd de jre-versie, en dus wordt de map java.home gedefinieerd als /usr/lib/jvm/java-6-sun-1.6.0.26/jre.

Als zodanig kan een uitvoerbaar bestand het gevonden bestand niet vinden tools.jar bestand, en zelfs het passeren van de -cp /usr/lib/jvm/java-6-sun-1.6.0.26/jdk/lib/tools.jar optie helpt niet. We hopen dat iemand kan helpen om een ​​licht te werpen op hoe we op een correcte manier toegang kunnen krijgen tot de tools.jar bestand waarmee we de juiste kunnen bellen com.sun.tools.javadoc.Main.execute methode.

Voorbeeld uitvoering:

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

2
2017-10-10 05:04


oorsprong




antwoorden:


Nou, het is een hack, maar we hebben uiteindelijk de kopie gekopieerd tools.jar bestand in de jre/lib/ext directory alsof we een jar-bestand van derden als extensie installeren. Dit lijkt een onnatuurlijke actie en dat we iets via de commandoregel zouden moeten doen via de -cp optie (geprobeerd en mislukt), of via een omgevingsvariabele (probeerde dat ook en het mislukte ook).


1
2017-10-12 03:33