在Ubuntu上安装Jetty,获取com.sun.tools.javac.Main不在类路径上

时间:2011-10-25 19:28:15

标签: java ubuntu jetty

我正在尝试在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,但这就是失败的原因。

非常感谢任何线索。谢谢!

3 个答案:

答案 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