Sun-Java-6 查找 tools.jar 时出现错误的 classpath/java.home 问题

Sun-Java-6 查找 tools.jar 时出现错误的 classpath/java.home 问题

我为在 Ubuntu 11.04 服务器发行版上运行的项目安装了sun-java6-jdksun-java6-jre(可能还有其他相关的 java6 包,例如字体)。我们的项目以编程方式从正在运行的可执行文件中调用 Javadoc。为此,我们显然需要知道 tools.jar 文件的位置,该文​​件是 JDK 发行版的一部分,但不是 JRE 发行版的一部分。这些包被安装到/usr/lib/jvm/java-6-sun-1.6.0.26/,在两个区域(JDK/JRE)下有 bin 和其他目录,它们提供各种标准二进制文件。

每当我们执行 java 程序(通过 java 二进制文件)时,内部 java.home 变量似乎会覆盖提供的任何 JAVA_HOME 环境变量。我们得出结论,二进制文件因此从二进制文件的路径派生出其 java.home。jdk 下的 java 二进制文件实际上是指向 jre 版本的链接。因此,无论您“执行”哪一个,您总是会获得 jre 版本,因此 java.home 目录被定义为/usr/lib/jvm/java-6-sun-1.6.0.26/jre

因此,任何正在运行的可执行文件似乎都找不到该tools.jar文件,即使传递该-cp /usr/lib/jvm/java-6-sun-1.6.0.26/jdk/lib/tools.jar选项也无济于事。我们希望有人能帮助我们阐明如何正确访问该tools.jar文件,使我们能够正确调用该com.sun.tools.javadoc.Main.execute方法。

执行示例:

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

答案1

好吧,这是个 hack,但我们最终将tools.jar文件复制到jre/lib/ext目录中,就像安装第三方 jar 文件作为扩展一样。这似乎是一个不自然的动作,我们应该通过选项在命令行上执行某些操作-cp(试过但失败了),或者通过环境变量执行某些操作(也试过但失败了)。

相关内容