Jetty Classpath问题
我目前正在运行Solr,它是随附的Jetty容器。 从命令行运行时,它可以正常运行:
java -jar start.jar
当我和start.jar在同一目录下时。 不幸的是,我需要能够从任何目录启动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)
请注意,当你运行
java ... -cp ~/solr/start.jar:... -jar ~/solr/start.jar ~/solr/etc/jetty.xml
由于使用-jar
选项,因此将忽略-cp
选项。
来自man java
:
-jar
使用此选项时,JAR文件是所有用户类的源,并忽略其他用户类路径设置。
你有两个选择:
- 继续使用
-jar
选项,但是你需要在jar清单文件中提供类路径(请注意,这些类路径条目不能相对于当前路径,只相对于您正在执行的jar文件) - 跳过
-jar
选项并显式提供主类。
在调用java之前只需更改到正确的目录….为我修复了问题。
你使用~
作为当前用户主目录的捷径。 我用绝对路径替换所有波形符,看看是否有帮助。
我在2014年1月碰到了这个问题。我的问题是因为我从其他地方运行了Cluster Zookeeper安装程序,$ SOLR_HOME / lib文件夹被移动到zkCli.bat存在的$ SOLR_HOME / cloud-scripts下。将lib文件夹复制回来$ SOLR_HOME /它现在有效。