java - 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 命令也能正常工作,但如果只是发布一个新版本并进行任何小的改动,我就会开始收到这个错误。所以在构建过程本身一定有问题。
有太多代码我无法在帖子中真正分享,所以如果你有任何线索或提示我可以如何找到解决方案,那将是很棒的。
解决方案
在我的情况下,检查您的依赖关系树,日志记录可能有两个不同的依赖关系,这就是它们在您的情况下造成不一致的原因。跑:
./gradlew app:dependencies
如果您使用的是包装器,请将 app 替换为项目模块名称。
和
gradle dependencies
带模块
推荐阅读
- java - 如何禁止某些工件在某些项目中使用?
- python - Python说'int'对象不可调用
- google-bigquery - 从主题 PubSub 读取数据流并写入 Bigquery(多个表)
- python - python lxml pkg - 如何使用 etree.xmlfile 增量写入 XML 文件并传入现有元素?
- javascript - Next.js 自定义 javascript 未在其自己的页面上运行
- swift - 将二进制框架链接到 Pod Target 和主应用程序项目
- javascript - 显示来自 AJAX 调用的有意义的错误消息时出现问题
- python - Anaconda Navigator 和 Spider 未打开(Shell 工作)
- java - 如何使用 Java 将数据存储到 MongoDb 数据库中?
- javascript - 如何在 JQuery 上修改鼠标滚轮事件或单击事件?