Sun-Java-6 Problemas de classpath/java.home incorretos ao encontrar Tools.jar

Sun-Java-6 Problemas de classpath/java.home incorretos ao encontrar Tools.jar

Eu instalei sun-java6-jdke 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.jararquivo, e mesmo passar a -cp /usr/lib/jvm/java-6-sun-1.6.0.26/jdk/lib/tools.jaropção não ajuda. Esperamos que alguém possa ajudar a esclarecer como podemos acessar corretamente o tools.jararquivo, permitindo-nos chamar o com.sun.tools.javadoc.Main.executemé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.jararquivo para o jre/lib/extdiretó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 -cpopção (tentei e falhou) ou por meio de uma variável de ambiente (tentei também e também falhou).

informação relacionada