Sun-Java-6 Problemas incorrectos en classpath/java.home al encontrar tools.jar

Sun-Java-6 Problemas incorrectos en classpath/java.home al encontrar tools.jar

Instalé sun-java6-jdky sun-java6-jre(y probablemente otros paquetes java6 relacionados, como fuentes) para un proyecto que se ejecuta en una distribución de servidor Ubuntu 11.04. Nuestro proyecto llama programáticamente a Javadoc desde nuestro ejecutable en ejecución. Para hacerlo, obviamente necesitamos saber la ubicación del archivo tools.jar que forma parte de la distribución JDK, pero no de la distribución JRE. Los paquetes se instalaron /usr/lib/jvm/java-6-sun-1.6.0.26/y hay directorios bin y otros en las dos áreas (JDK/JRE) que proporcionan los diversos binarios estándar.

Siempre que ejecutamos un programa java (a través del binario java), la variable interna java.home parece sobrescribir cualquier variable de entorno JAVA_HOME proporcionada. Hemos concluido que el binario deriva su java.home de la ruta del binario. El binario de Java bajo jdk es realmente un enlace a la versión jre. Por lo tanto, no importa cuál "ejecute", siempre obtendrá la versión jre y, por lo tanto, el directorio java.home está definido como /usr/lib/jvm/java-6-sun-1.6.0.26/jre.

Como tal, cualquier ejecutable en ejecución parece no poder encontrar el tools.jararchivo, e incluso pasar la -cp /usr/lib/jvm/java-6-sun-1.6.0.26/jdk/lib/tools.jaropción no ayuda. Esperamos que alguien pueda ayudarnos a arrojar algo de luz sobre cómo podemos acceder correctamente al tools.jararchivo, lo que nos permitirá llamar correctamente al com.sun.tools.javadoc.Main.executemétodo.

Ejecución de ejemplo:

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

Respuesta1

Bueno, es un truco, pero terminamos copiando el tools.jararchivo en el jre/lib/extdirectorio como si estuviéramos instalando un archivo jar de terceros como extensión. Esto parece una acción antinatural y deberíamos hacer algo en la línea de comando a través de la -cpopción (lo probé y falló), o mediante una variable de entorno (lo intenté también y falló).

información relacionada