【问题标题】:Running Jar on Snow Leopard with classpath使用类路径在 Snow Leopard 上运行 Jar
【发布时间】:2011-02-14 05:49:19
【问题描述】:

我正在运行雪豹,我刚刚在 Eclipse 上编写了一个 Java 类。 eclipse 项目引用了一个用户库,该库本身指向我在系统中某个地方的一堆 jar 文件。当我通过 Eclipse 运行应用程序时,一切都很顺利。 然后我将该类导出为 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

再一次,不好。我用谷歌搜索了如何在雪豹中执行 jars,在某些地方发现了 32/64 位大问题,甚至尝试使用 -d32 选项执行,但仍然无济于事。 由于相同的代码在 Eclipse 中执行得很好,我非常相信这只是设置 JVM 以使其正确包含用户库的问题。

谁能帮我解决这个问题?

提前致谢。

【问题讨论】:

    标签: java osx-snow-leopard classpath


    【解决方案1】:

    您需要在类路径中列出 JAR 本身,而不仅仅是包含它们的目录。 (列出目录是为了当您在周围的包层次结构中有未归档的 .class 文件时)

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

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

    【讨论】:

    • 感谢您的回复,单独添加罐子效果很好。
    • 它应该是-cp '/Users/myname/tempJars/*',这样shell就不会过早地扩展通配符(假设JVM通配符语法完全有效)。
    猜你喜欢
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2013-12-17
    • 2011-08-16
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多