Jetty类路径问题

9

我目前在Jetty容器中运行Solr。当通过命令行运行时,它可以正常运行:

java -jar start.jar

当我在与start.jar相同的目录中时,可以启动Jetty。不幸的是,我需要能够从任何目录启动Jetty,而不仅仅是包含start.jar的目录。我尝试了许多选项,例如:

java  -Dsolr.solr.home=~/solr/ -Djetty.home=~/solr/ -Djetty.logs=~/solr/logs/ -cp ~/solr/start.jar:~/solr/lib/jetty-util-6.1.26-patched-JETTY-1340.jar:~/solr/lib/jetty-6.1.26-patched-JETTY-1340.jar:~/solr/lib/servlet-api-2.5-20081211.jar -jar ~/solr/start.jar ~/solr/etc/jetty.xml 

每次我都会得到这样的回溯:
java.lang.ClassNotFoundException: org.mortbay.xml.XmlConfiguration
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at org.mortbay.start.Main.invokeMain(Main.java:179)
at org.mortbay.start.Main.start(Main.java:534)
at org.mortbay.start.Main.start(Main.java:441)
at org.mortbay.start.Main.main(Main.java:119)
4个回答

7

我只需要在调用 Java 之前更改到正确的目录,问题就解决了。


我也遇到了同样的问题,但我还是试图运行它 :). 这个方法解决了它!谢谢。 - despot

5
请注意,当您运行时
java  ... -cp ~/solr/start.jar:... -jar ~/solr/start.jar ~/solr/etc/jetty.xml 

-jar选项被使用时,-cp选项会被忽略。

来自man java:

-jar

当您使用此选项时,JAR文件是所有用户类的源,其他用户类路径设置将被忽略。

您有两个选择:

  • 继续使用-jar选项,但需要在jar清单文件中提供类路径(请注意,这些类路径条目不能相对于当前路径,只能相对于您正在执行的jar文件)
  • 跳过-jar选项并明确提供主类。

0

我在2014年1月遇到了这个问题。我的问题是因为我从其他地方运行了一个集群Zookeeper设置,$SOLR_HOME/lib文件夹被移动到了$SOLR_HOME/cloud-scripts下,其中zkCli.bat存在。将lib文件夹复制回$SOLR_HOME/,现在它可以正常工作。


0

您正在使用 ~ 作为访问当前用户主目录的快捷方式。我建议将所有波浪号字符替换为绝对路径并查看是否有所帮助。


1
这已经在执行之前由bash完成了。尝试echo hello ~,你会看到的。 - aioobe
我并没有假设他总是从 bash 执行。Ubuntu 偶尔会对默认 shell 选择(dash vs bash?)进行一些奇怪的处理,而且我过去也遇到过波浪号扩展的问题。 - Femi
所有兼容的shell都相同。在您喜欢的手册中阅读有关波浪号扩展的内容。 - aioobe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接