Я установил sun-java6-jdk
и sun-java6-jre
(и, вероятно, другие связанные пакеты java6, такие как шрифты) для проекта, работающего на дистрибутиве сервера Ubuntu 11.04. Наш проект программно вызывает 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 из пути двоичного файла. Бинарный файл Java под JDK действительно является ссылкой на версию 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
Ну, это взлом, но мы закончили копировать файл tools.jar
в каталог jre/lib/ext
, как если бы мы устанавливали сторонний jar-файл в качестве расширения. Это кажется неестественным действием, и мы должны что-то делать в командной строке с помощью опции -cp
(пробовал, но не получилось) или с помощью переменной окружения (пробовал тоже, и тоже не получалось).