Son*_*man 1 java macos scripting jar
我有一个奇怪的问题,我无法理解......我有一个简单的HelloWorld jar,我在Eclipse中构建了Apache Loggingsjar,它的类路径就是jar.我写了一个运行jar的脚本:
#!/bin/sh
export CLASSPATH=lib/*:$CLASSPATH
java -jar HelloWorld.jar
Run Code Online (Sandbox Code Playgroud)
这里的目录结构是一个主目录,其中包含一个HelloWorld.jar和一个lib子目录commons-logging-1.1.1.jar.
运行此脚本工作正常.但是,当我将其HelloWorld.jar放入lib目录(即在一个地方包含所有JAR)并执行时java -jar lib/HelloWorld.jar,我得到:
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
Run Code Online (Sandbox Code Playgroud)
错误.为什么?!?!?!?!
我问这个是因为我在OSX上使用JarBundler为HelloWorld应用程序创建了一个Application包,并在MacOS目录中放置了一个修改过的脚本,而所有的lib都放在了Resources/Java目录中.修改后的脚本版本是:
#!/bin/sh
RESOURCE_DIR=$(cd "../Resources"; pwd)
export CLASSPATH=$RESOURCE_DIR/Java/*:$CLASSPATH
java -jar $RESOURCE_DIR/Java/HelloWorld.jar
Run Code Online (Sandbox Code Playgroud)
而且我得到了与上面相同的错误我真的很感激任何帮助理解为什么我不能这样做和/或如何解决它?
Classpath不适用于通配符.必须明确指定每个jar,作为CLASSPATH变量的一部分或在类路径中包含的另一个jar的清单中.
此外,IIRC java -jar会忽略类路径中存在的所有第三方jar.为什么不这样做呢?
java -cp yourJar:logJars <mainClass>
Run Code Online (Sandbox Code Playgroud)