Eu instalei sun-java6-jdk
e sun-java6-jre
(e provavelmente outros pacotes Java6 relacionados, como fontes) para um projeto em execução em uma distribuição de servidor Ubuntu 11.04. Nosso projeto chama programaticamente o Javadoc de dentro do nosso executável em execução. Para fazer isso, obviamente precisamos saber a localização do arquivo tools.jar que faz parte da distribuição JDK, mas não da distribuição JRE. Os pacotes foram instalados /usr/lib/jvm/java-6-sun-1.6.0.26/
e há bin e outros diretórios nas duas áreas (JDK/JRE) que fornecem os vários binários padrão.
Sempre que executamos um programa java (por meio do binário java), a variável interna java.home parece substituir qualquer variável de ambiente JAVA_HOME fornecida. Concluímos que o binário deriva seu java.home do caminho do binário. O binário java no jdk é realmente um link para a versão jre. Assim, não importa qual você 'execute', você sempre obterá a versão jre e, portanto, o diretório java.home é definido como /usr/lib/jvm/java-6-sun-1.6.0.26/jre
.
Como tal, qualquer executável em execução parece não conseguir encontrar o tools.jar
arquivo, e mesmo passar a -cp /usr/lib/jvm/java-6-sun-1.6.0.26/jdk/lib/tools.jar
opção não ajuda. Esperamos que alguém possa ajudar a esclarecer como podemos acessar corretamente o tools.jar
arquivo, permitindo-nos chamar o com.sun.tools.javadoc.Main.execute
método corretamente.
Exemplo de execução:
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
Responder1
Bem, é um hack, mas acabamos copiando o tools.jar
arquivo para o jre/lib/ext
diretório como se estivéssemos instalando um arquivo jar de terceiros como extensão. Isso parece uma ação não natural e deveríamos fazer algo na linha de comando por meio da -cp
opção (tentei e falhou) ou por meio de uma variável de ambiente (tentei também e também falhou).