![](/img/trans.png)
[英]my Issue with log4j java.lang.ClassNotFoundException: =org.apache.log4j.RollingFileAppender
[英]java.lang.ClassNotFoundException with log4j
我正在用gradle尝试我的第一个项目。 我的项目具有log4j-1.2.17.jar的依赖项。构建我的项目后,将生成一个jar文件。 我尝试使用以下命令运行它:
java -classpath ".:/home/ec2-user/dlsvr/lib/log4j-1.2.17.jar" -jar dlsvr.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
at com.secutrans.dlsvr.DLSvrMain.<clinit>(DLSvrMain.java:27)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
但是,如果我使用gradle构建fatjar,则fatjar无需指定任何类路径即可工作。 gradle中的依赖项语句如下:
dependencies
{
compile files("/home/ec2-user/dlsvr/lib/log4j-1.2.17.jar")
}
您忘记在类路径中包含log4j.jar
An executable JAR must reference all the other dependent JARs it requires through the Class-Path header of the manifest file. The environment variable CLASSPATH and any class path specified on the command line is ignored by the JVM if the -jar option is used.
是的,AbtPst是正确的。 这是一个类路径问题。
这是类似的问题。 java -jar选项是否会更改类路径选项
可执行JAR必须通过清单文件的Class-Path标头引用其所需的所有其他依赖JAR。 如果使用-jar选项,则JVM将忽略环境变量CLASSPATH和命令行上指定的任何类路径。
我的问题通过通过gradle在jar的清单文件中添加classpath得以解决。
jar {
manifest {
attributes(
"Class-Path": configurations.compile.collect { it.getName() }.join(' '))
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.