2011-02-14 121 views
0

我正在运行雪豹,我只是在eclipse上写了一个Java类。 eclipse项目引用一个用户库,它本身指向我在系统中某处的一堆jar文件。当我通过eclipse运行应用程序时,一切都很顺利。 后来我的类导出为jar文件,并尝试运行它通过键入形成终端:在雪豹上运行Jar类路径

java - jar myApp.jar 

它抛出一个java.lang.NoClassDefFoundError异常,这意味着它无法找到我尝试将库参考。 知道我的用户库jar文件位于/ Users/myname/tempJars中,我还尝试使用-cp选项 (java -cp /Users/myname/tempJars -jar myApp.jar)来提及类路径,或者直接在清单文件中引用它。两次尝试都失败了,错误也是一样的。 这些库是Java 1.5库,所以我想我应该试着通过JAVA_HOME环境变量引用另一个Java版本。我建立了以下脚本:

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.5/Home 
export PATH=$JAVA_HOME/bin:$PATH 
export CLASSPATH=$CLASSPATH:/Users/myname/tempJars 

java -jar myApp.jar 

再次,没有好处。我搜索了如何在雪豹中执行罐子,在某些地方发现了32/64位的大问题,甚至尝试使用-d32选项执行,但仍无济于事。 由于相同的代码在Eclipse中执行的很好,我相当确信这只是设置JVM的一个问题,以便它正确地包含用户库。

任何人都可以帮助我吗?

在此先感谢。

回答

3

您需要在类路径中列出JAR本身,而不仅仅是包含它们的目录。 (清单目录是当你在包层次未归档的.class文件躺在附近)

你可能会需要做-cp /Users/myname/tempJars/libA.jar:/.../libB.jar

我相信一些(但可能不是全部)的JVM支持通配符如此-cp /Users/myname/tempJars/*或它的某些变体可能起作用。

+0

感谢您的回复,单独添加罐子效果很好。 – 2011-02-14 10:44:17