java.lang.NoClassDefFoundError while running jar



我使用SLF4J记录器。jar文件放置在../lib目录下。应用程序是在Netbeans中使用maven创建的。但是我想自己做一切来自学。

应用程序是用命令编译的(当然分号后面没有空格——我添加它们是为了更好的可读性):

javac -cp ../lib/poi-3.10-FINAL-20140208.jar;
  ../lib/slf4j-api-1.7.6.jar;
  ../lib/slf4j-log4j12-1.7.6.jar;
  ../lib/commons-io-1.4.jar 
-d target/classes srcmainjavaplaldenconvertcosts*.java

我可以用

运行它
java -cp ../lib/poi-3.10-FINAL-20140208.jar;
  ../lib/slf4j-api-1.7.6.jar;
  ../lib/slf4j-log4j12-1.7.6.jar;
  ../lib/commons-io-1.4.jar;
  ../lib/log4j-1.2.17.jar;
  target/classes
  pl/alden/convertcosts/App

我知道我可以将所有jar文件设置为cl classpath系统变量(Windows 7)。

我想把所有的jar和运行它从这个jar。我使用

创建jar
jar cvfm convertcosts.jar manifest.mf -C target/classes/ .

我有适当的jar: jar tf convertcosts.jar给出

META-INF/
META-INF/MANIFEST.MF
.netbeans_automatic_build
log4j.properties
pl/
pl/alden/
pl/alden/convertcosts/
pl/alden/convertcosts/App.class
pl/alden/convertcosts/ConvertCostsException.class
...

现在我想从bat文件运行应用程序:

set classpath=../lib/poi-3.10-FINAL-20140208.jar;
  ../lib/slf4j-api-1.7.6.jar;
  ../lib/slf4j-log4j12-1.7.6.jar;
  ../lib/commons-io-1.4.jar;
  ../lib/log4j-1.2.17.jar
java -jar convertcosts.jar

因此我有

Exception in thread "main" java.lang.NoClassDefFoundError: 
  org/slf4j/LoggerFactory
  at pl.alden.convertcosts.App.<clinit>(App.java:10)

对我来说,它看起来像主jar文件没有看到库jar文件。

我应该改变什么?

最好坚持使用显式命令行类路径定义:

java -cp ../lib/poi-3.10-FINAL-20140208.jar;
  ../lib/slf4j-api-1.7.6.jar;
  ../lib/slf4j-log4j12-1.7.6.jar;
  ../lib/commons-io-1.4.jar;
  ../lib/log4j-1.2.17.jar
  -jar convertcosts.jar

定义classpathCLASSPATH环境变量具有系统范围的影响,您应该意识到并非所有java应用程序都需要在其类路径中放置这些特定的jar。如果您确实需要,那么在定义CLASSPATH的值时,至少要使用完整路径而不是../lib/

最新更新