2011-09-24 127 views
9

我目前正在運行Solr以使用它附帶的Jetty容器。它從命令行運行時正確運行: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) 

回答

5

注意,當您運行

java ... -cp ~/solr/start.jar:... -jar ~/solr/start.jar ~/solr/etc/jetty.xml 

,因爲你的-cp選項被忽略使用-jar選項。

man java

-jar

當您使用此選項,JAR文件是所有用戶 類的源,和其他用戶類路徑設置將被忽略。

你有兩個選擇:

  • 繼續使用-jar選項,但你需要提供在JAR清單文件類路徑(注意,這些類路徑條目不能相對到當前路徑,僅相對於正在執行的jar文件)
  • 跳過-jar選項並明確提供主類。
0

您正在使用~作爲當前用戶主目錄的捷徑。我會用絕對路徑替換所有的波浪號字符,看看是否有幫助。

+1

這在執行前已經由bash完成了。試試'echo hello〜',你會看到。 – aioobe

+0

沒有假設他總是從bash執行。 Ubuntu有時會用默認的shell選項(* dash * vs * bash *,任何人?)來做怪異的事情(在過去,我已經有了代字符擴展問題。 – Femi

+0

所有兼容的外殼都一樣。閱讀您最喜愛的手冊中的代字號擴展。 – aioobe

7

在調用java之前,只需更改正確的目錄....解決了我的問題。

+0

我有同樣的問題,我試圖無論如何運行:)。這解決了它!謝謝。 – despot

0

我在2014年1月遇到了這個問題。我的問題是,因爲我從其他地方運行了Cluster Zookeeper安裝程序,所以$ SOLR_HOME/lib文件夾被移到了$ SOLR_HOME/cloud-scripts中,其中存在zkCli.bat。 lib文件夾放回$ SOLR_HOME /下,它現在可以工作。