首页 > 解决方案 > LogFactory$1 未实现请求的接口 java.security.PrivilegedAction

问题描述

Java 版本 14
gradle 版本 6.6.1 和 6.8.3

我有一个库项目,我们有类似 spring-boot-starter-web(排除模块 logbck-classic)、spring-boot-starter-data-jpa、hibernate-core、lombok 等库。我没有 spring-boot-入门日志。

我能够构建这个库项目并发布到本地 Maven 存储库。

然后我在另一个springboot项目中使用它,构建也成功了。

当我尝试使用命令运行它时

java -jar build/libs/project.jar

我得到了这个异常,这是唯一的输出:

Exception in thread "main" java.lang.reflect.InvocationTargetException
         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
         at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
         at java.base/java.lang.reflect.Method.invoke(Method.java:564)
         at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
         at org.springframework.boot.loader.Launcher.launch(Launcher.java:107)
         at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
         at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
 Caused by: java.lang.IncompatibleClassChangeError: Class org.apache.commons.logging.LogFactory$1 does not implement the requested interface java.security.PrivilegedAction
         at java.base/java.security.AccessController.doPrivileged(AccessController.java:312)
         at org.apache.commons.logging.LogFactory.getContextClassLoaderInternal(LogFactory.java:808)
         at org.apache.commons.logging.LogFactory.getFactory(LogFactory.java:419)
         at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:655)
         at org.springframework.boot.SpringApplication.<clinit>(SpringApplication.java:196)
         at com.something.autoendorsement.AutoEndorsementApplication.main(AutoEndorsementApplication.java:16)
         ... 8 more

我能够在互联网上找到类似的错误,但完全不相关。

奇怪的是,当我使用 intellij 运行项目时,一切正常。

一个更奇怪的部分是,截至今天,我正在使用这个库的一个版本,即使使用 java -jar 命令也能正常工作,但如果只是发布一个新版本并进行任何小的改动,我就会开始收到这个错误。所以在构建过程本身一定有问题。

有太多代码我无法在帖子中真正分享,所以如果你有任何线索或提示我可以如何找到解决方案,那将是很棒的。

标签: javaspring-bootgradlelogging

解决方案


在我的情况下,检查您的依赖关系树,日志记录可能有两个不同的依赖关系,这就是它们在您的情况下造成不一致的原因。跑:

./gradlew app:dependencies

如果您使用的是包装器,请将 app 替换为项目模块名称。

gradle dependencies

带模块


推荐阅读