Установка Jetty в Ubuntu, получение com.sun.tools.javac. Главное не в classpath - PullRequest
1 голос
/ 25 октября 2011

Я пытаюсь установить Jetty на Ubuntu 11.04, и я собираюсь вырвать свои волосы.Я сталкиваюсь с проблемой classpath.Я запускаю Jetty с start.jar, устанавливая JAVA_HOME так, чтобы он указывал на JDK.

/usr/share/jetty$ export JAVA_HOME=/usr/lib/jvm/java-6-sun
/usr/share/jetty$ java -jar start.jar 

[...]

com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "/usr/lib/jvm/java-6-sun-1.6.0.26/jre"

    at org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory.getCompiler(CompilerAdapterFactory.java:127)
...

Обратите внимание, что он игнорирует установленный мной JAVA_HOME и использует jre.Я также пробовал это:

java -classpath /usr/lib/jvm/java-6-sun/lib/tools.jar -jar start.jar

То же сообщение об ошибке.Это не находит, com.sun.tools.javac.Main, и это в tools.jar.

В глубине души Jetty, когда он пытается скомпилировать мои .jsp, использует Ant, и я предполагаю, что он выполняет какие-то трюки с загрузкой классов.Кто-нибудь знает, в чем секрет того, чтобы сообщить этой шалкой программе, где находится мой файл tools.jar ??

Обратите внимание, что я получил ту же ошибку с sun jdk и openjdk, и да, я делаюустановите JDK, а не только JRE.

Способ, которым apt-get устанавливает java, двоичный файл java, который является частью JDK, указывает на JRE.Например:

ls -alph /usr/lib/jvm/java-6-sun/bin/java
lrwxrwxrwx 1 root root 15 2011-10-25 18:48 /usr/lib/jvm/java-6-sun/bin/java -> ../jre/bin/java

Я предполагаю, что Jetty, Jasper или Ant предпринимают некоторые хитрости, пытаясь найти tools.jar, основываясь на расположении исполняемого файла java, и это то, что здесь не получается.

Любые подсказки очень ценятся.Спасибо!

Ответы [ 3 ]

1 голос
/ 26 октября 2011

Поскольку комментарии на SO не читаются, вот информация, которую вы просили:

$ lsb_release -s -c
natty

Я установил Sun JDK примерно так, но помните, что та же ошибка произошла с openjdk.

sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo apt-get update
sudo apt-get -y install sun-java6-jdk
sudo update-alternatives --config java

Я почти уверен, что настройка среды, в которой я запускаю start.jar, идет по неверному пути, так как я очень старался с этим и ничего не получил.

Jasper вызова Jetty, который вызывает задачу Ant, которая компилирует ваши JSP. В source для Ant org / apache / tools / ant / taskdefs / Javac.java от Ant вы можете увидеть, где он устанавливает classpath.

Вероятно, моя проблема связана с передачей или не передачей переменных среды или, возможно, свойств java-систем по этой цепочке.

Уродливое решение

Просто для смеха я создал символическую ссылку с /usr/lib/jvm/java-6-sun/lib/tools.jar на / usr / lib / jvm / java-6-sun / jre / lib / ext , Уродливый, а? Но это работает.

1 голос
/ 08 ноября 2012

Вы можете добавить tools.jar в путь к классу загрузки JVM:

java -Xbootclasspath/p:/usr/lib/jvm/java-6-sun/lib/tools.jar -jar start.jar
1 голос
/ 26 октября 2011

Хотя вы экспортируете новую переменную среды JAVA_HOME, я не вижу, что вы также экспортируете новую переменную среды PATH. Вы, вероятно, все еще берете исполняемый файл java из исходного домашнего расположения Java. Попробуйте включить export PATH=$JAVA_HOME/bin:$PATH.

...