2015-07-22 173 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