Sun-Java-6 Problemas incorretos do caminho de classe / java.home ao localizar o tools.jar

2

Instalei sun-java6-jdk e sun-java6-jre (e provavelmente outros pacotes java6 relacionados, como fontes) para um projeto executado em uma distribuição de servidor Ubuntu 11.04. Nosso projeto chama programaticamente Javadoc de dentro do nosso executável em execução. Para fazer isso, obviamente precisamos saber o local do arquivo tools.jar que faz parte da distribuição do JDK, mas não da distribuição do JRE. Os pacotes foram instalados em /usr/lib/jvm/java-6-sun-1.6.0.26/ e existem bin e outros diretórios sob as duas áreas (JDK / JRE) que fornecem os vários binários padrão.

Sempre que executamos um programa java (via binário java), a variável java.home interna parece sobrescrever qualquer variável de ambiente JAVA_HOME fornecida. Concluímos que o binário deriva o seu java.home do caminho do binário. O binário java sob o jdk é realmente um link para a versão do jre. Assim, não importa qual você 'execute', você está sempre obtendo a versão do 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 não consegue encontrar o arquivo tools.jar , e mesmo passando a opção -cp /usr/lib/jvm/java-6-sun-1.6.0.26/jdk/lib/tools.jar não ajuda. Esperamos que alguém possa ajudar a esclarecer como podemos acessar corretamente o arquivo tools.jar , permitindo que possamos chamar corretamente o método com.sun.tools.javadoc.Main.execute .

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.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
    
por docSquale 10.10.2011 / 07:04

1 resposta

1

Bem, é um hack, mas acabamos copiando o arquivo tools.jar para o diretório jre/lib/ext como se estivéssemos instalando um arquivo jar de terceiros como uma extensão. Isso parece uma ação não natural e que deveríamos estar fazendo algo na linha de comando através da opção -cp (tentou e falhou), ou através de uma variável de ambiente (tentei também e também falhou).

    
por docSquale 12.10.2011 / 05:33