2015-07-22 171 views
-2

我在java上有一個新手問題;無法正確設置類路徑。我錯過了一些非常基本和微不足道的東西。無法正確設置Java類路徑

我有一個jar文件。 foo.jar,在e:\ bar中。

這個工作的命令行,在當前目錄爲e:\酒吧

java -jar foo.jar <params> 

當我改變目錄E:它開始投擲類沒有發現異常。所以我設置了-cp來指定類路徑。無論我都試過,到目前爲止,它已經無法正常工作

java -cp ".;e:/bar/*;e:/bar/lib/*" -jar bar/foo.jar <params> 
java -cp "." -jar bar/foo.jar <params> 
.... 

我總是得到這樣的例外:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/httpclient/MultiThreadedHttpConnectionManager 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Unknown Source) 
     at org.apache.axis.utils.ClassUtils$2.run(ClassUtils.java:187) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at org.apache.axis.utils.ClassUtils.loadClass(ClassUtils.java:171) 
     at org.apache.axis.utils.ClassUtils.forName(ClassUtils.java:112) 
     at org.apache.axis.deployment.wsdd.WSDDTargetedChain.makeNewInstance(WSDDTargetedChain.java:196) 
     at org.apache.axis.deployment.wsdd.WSDDDeployableItem.getNewInstance(WSDDDeployableItem.java:310) 
     at org.apache.axis.deployment.wsdd.WSDDDeployableItem.getInstance(WSDDDeployableItem.java:296) 
     at org.apache.axis.deployment.wsdd.WSDDDeployment.getTransport(WSDDDeployment.java:470) 
     at org.apache.axis.configuration.FileProvider.getTransport(FileProvider.java:282) 
     at org.apache.axis.AxisEngine.getTransport(AxisEngine.java:283) 
     at org.apache.axis.client.AxisClient.invoke(AxisClient.java:179) 
     at org.apache.axis.client.Call.invokeEngine(Call.java:2564) 
     at org.apache.axis.client.Call.invoke(Call.java:2553) 
     at com.ideas.jws.gftservice.GFTMessenger.sendMessage(GFTMessenger.java:1 
+0

因爲當Windows開始使用'/'作爲目錄分隔符而不是'\'? – zubergu

+0

@zubergu大約15年前(如果不是更多),任何一個人都可以工作。 – immibis

+0

我建議你使用eclipse導出一個Java項目與依賴JAR文件相結合,那麼你根本不需要設置classpath,請參閱http://stackoverflow.com/questions/11033603/how-to-create -a-jar-with-external-libraries-included-in-eclipse –

回答

0

-cp-jar工作。

如果你知道主類名,那麼你可以解決它通過不使用-jar

java -cp ".;e:/bar/*;e:/bar/lib/*;bar/foo.jar" main.class.name.Here <params> 
+0

謝謝。剛剛嘗試過。同樣確切的錯誤。 – Amit

0

隨着應用的罐子是依賴一組特定的罐子中,一個常見的做法是有:

distribution 
├─ myapp.jar 
└─ lib 
    ├─ libaaa-1.2.3.jar 
    └─ libbbb-2-3-4.jar 

在本申請一個罐子的META-INF/MANIFEST.MF經常產生Class-Path: ...條目。

那麼沒有,你只能運行應用程序foo.jar本身。

要自動化這種依賴關係,我的個人偏好是使用maven。 (gradle也很受歡迎。)

+0

我從第三方那裏得到的foo,jar是這種格式。 foo.jar然後是一個lib文件夾。雖然沒有META-INF文件。 – Amit

+0

我一直希望這是微不足道的,我失蹤了。當然,我不需要跳過籃球運行一個基本的Java程序.... – Amit