我正在尝试在Ubuntu 11.04上安装Jetty而我正要拔掉头发。我遇到了类路径问题。我用start.jar启动Jetty,将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的方式,JDK的Java二进制文件指向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会尝试根据java可执行文件的位置找到tools.jar,但这就是失败的原因。
非常感谢任何线索。谢谢!
答案 0 :(得分:1)
虽然您要导出新的JAVA_HOME环境变量,但我没有看到您也在导出新的PATH环境变量。您可能仍在从原始Java主目录位置获取java
可执行文件。尝试加入export PATH=$JAVA_HOME/bin:$PATH
。
答案 1 :(得分:1)
由于评论在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的环境是在错误的轨道上,因为我非常努力地使用它并且无处可去。
Jetty调用的Jasper,它调用编译JSP的Ant任务。在Ant的org / apache / tools / ant / taskdefs / Javac.java的source中,您可以看到它在哪里设置类路径。
我的问题可能与传递或不传递环境变量或者可能是该系统中的Java系统属性有关。
丑陋的解决方案
只是为了笑,我创建了一个从/usr/lib/jvm/java-6-sun/lib/tools.jar到/ usr / lib / jvm / java-6-sun / jre / lib / ext的符号链接。丑陋,对吧?但是,它有效。
答案 2 :(得分:1)
您可以将tools.jar添加到JVM的引导类路径中:
java -Xbootclasspath/p:/usr/lib/jvm/java-6-sun/lib/tools.jar -jar start.jar