在我的 Java 17 maven 项目中,我使用基于 log4j2 的 slf4j。当我从 Eclipse 中启动它时,它运行良好。
Maven 将主类放置在模块 jar 文件的 MANIFEST 中,并将所有依赖的 jar 文件放置在 target/lib 文件夹中。
target/lib 托管文件 log4j-api-3.0.0-alpha1.jar,该文件托管类 org.apache.logging.log4j.Logger.
我已经使用 bash 命令检查了 org.apache.logging.log4j.Logger 的存在
for i in target/lib/*.jar; do jar -tvf "$i" | grep -Hsi org.apache.logging.log4j.Logger; done
当我从命令行运行我的程序时
java -p target/lib -m eu.ngong.iqStm
我失败了
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/Logger
at [email protected]/org.apache.logging.slf4j.SLF4JServiceProvider.initialize(SLF4JServiceProvider.java:53)
at [email protected]/org.slf4j.LoggerFactory.bind(LoggerFactory.java:195)
at [email protected]/org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:182)
at [email protected]/org.slf4j.LoggerFactory.getProvider(LoggerFactory.java:490)
at [email protected]/org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:476)
at [email protected]/org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:425)
at [email protected]/org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:451)
at [email protected]/eu.ngong.iqStm.App.<clinit>(App.java:30)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 8 more
缩小java找不到类org.apache.logging.log4j.Logger的原因的想法?
知道我必须在命令行上添加什么才能运行我的程序吗?
由于
log4j-slf4j2-impl
版本中的 alpha1
不是完整模块,因此 JVM 无法找到其依赖项。您需要明确添加 log4j-api
模块:
java -p target/lib --add-modules org.apache.logging.log4j -m eu.ngong.iqStm
在下一个alpha版本中所有模块都将被命名为JPMS模块,所以这个问题将不会出现。