Instalé sun-java6-jdk
y 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.jar
archivo, e incluso pasar la -cp /usr/lib/jvm/java-6-sun-1.6.0.26/jdk/lib/tools.jar
opción no ayuda. Esperamos que alguien pueda ayudarnos a arrojar algo de luz sobre cómo podemos acceder correctamente al tools.jar
archivo, lo que nos permitirá llamar correctamente al com.sun.tools.javadoc.Main.execute
mé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.jar
archivo en el jre/lib/ext
directorio 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 -cp
opción (lo probé y falló), o mediante una variable de entorno (lo intenté también y falló).