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