无法正确设置Java类路径

时间:2015-07-22 07:21:26

标签: java

我对java有一个新手问题;无法正确设置类路径。我错过了一些非常基本和微不足道的东西。

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

当目前的目录是e:\ bar

时,这可以从命令行工作
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

2 个答案:

答案 0 :(得分:0)

-cp不适用于-jar

如果你知道主要的班级名称,那么你可以通过不使用-jar来解决它:

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

答案 1 :(得分:0)

由于应用程序jar依赖于一组特定的jar,一种常见的做法是:

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

在应用程序jar的META-INF / MANIFEST.MF中,通常会生成一个Class-Path: ...条目。

然后,您只能运行应用程序foo.jar本身。

要自动化此类依赖项,我的个人偏好是使用maven。 (gradle也很受欢迎。)

相关问题