博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
升级log4j到log4j2报错:cannot access org.apache.http.annotation.NotThreadSafe
阅读量:4623 次
发布时间:2019-06-09

本文共 1342 字,大约阅读时间需要 4 分钟。

问题与分析

今天把项目的log4j的依赖改成了log4j2的依赖后,发现使用Maven打包时报错如下:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project cbx-core: Compilation failure[ERROR] cannot access org.apache.http.annotation.NotThreadSafe[ERROR] class file for org.apache.http.annotation.NotThreadSafe not found

意思很清楚,找不到类NotThreadSafe。当我把log4j2改回来log4j后重新打包就不再报错,很明显,和log4j2有关。

纳闷的是,我先前独自写了个测试类是没问题的,怎么一到项目里使用就报错了呢?Eclipse里也没有报错,看了下pom的依赖层级,也没发现有什么jar包冲突。百度了下,发现了问题原因。

该问题是因为httpclient和httpcore两个jar包版本不匹配造成的。由于项目里使用了ElasticSearch,需要httpclient等相关的依赖,其中有两个依赖如下:

org.apache.httpcomponents
httpclient
4.5.2
org.apache.httpcomponents
httpcore
4.4.5

原本在使用log4j的时候,项目可以正常打包,但当改成log4j2的时候,需要使用到httpcore包中的某个注解,但由于在4.4.5版本的httpcore中舍弃了一些注解,于是就报错说找不到NotThreadSafe。

根据Apache的jira issue:来看,里边的comment提到了:

The problem is that the httpclient and httpcore versions are incompatible.

根据comment来看,httpcore是httpclient的依赖,比较合适的版本应该是4.5.2的httpclient和4.4.4的httpcore。

而从pom的依赖层次看,4.5.2的httpclient本身就是依赖了4.4.4版本的httpcore;但由于项目里偏偏引入更高版本的httpcore,平时固然没问题,但一旦导入某些jar包譬如log4j2,就会编译报错。

解决方法

将httpcore的版本改成4.4.4(低于4.4.5即可),重新进行Maven打包操作,结果编译成功,顺利打包。

参考链接

转载于:https://www.cnblogs.com/yulinlewis/p/10188391.html

你可能感兴趣的文章
输出 Office 报表
查看>>
galera cluster集群的分裂与仲裁机制
查看>>
day19
查看>>
java基础学习总结六(对象与类、类的属性与方法)
查看>>
PAT天梯赛L2-005 集合相似度
查看>>
Exercise 15: Reading Files
查看>>
进制转换的方法和技巧
查看>>
初级前端自学react-native,必备知识点(ES6+ReactJS+flexbox)
查看>>
JAVA 9 新特性
查看>>
Java还是程序员的金饭碗
查看>>
Qt - 设置TableWidget只读
查看>>
Lucene:信息检索与全文检索
查看>>
J2EE开发之常用开源项目介绍
查看>>
8. String to Integer (atoi)
查看>>
移动硬盘磁盘结构损坏且无法读取文件怎样恢复
查看>>
学习记录(部分myeclipse快捷键,一些面试题),有点乱,但是挺有用
查看>>
poj2114 Boatherds
查看>>
maven学习(上)- 基本入门
查看>>
20165231 实验一 Java开发环境的熟悉
查看>>
移动商城第八篇【添加商品之基本属性和大字段数据(FCK文本编辑器)】
查看>>