升级log4j到log4j2报错:cannot access org.apache.http.annotation.NotThreadSafe
问题与分析
今天把项目的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等相关的依赖,其中有两个依赖如下:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.5</version>
</dependency>
原本在使用log4j的时候,项目可以正常打包,但当改成log4j2的时候,需要使用到httpcore包中的某个注解,但由于在4.4.5版本的httpcore中舍弃了一些注解,于是就报错说找不到NotThreadSafe。
根据Apache的jira issue:HDFS-12527来看,里边的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打包操作,结果编译成功,顺利打包。
参考链接
- Error:java: 无法访问org.apache.http.annotation.ThreadSafe 找不到org.apache.http.annotation.ThreadSafe的类文件
- javadoc: error - class file for org.apache.http.annotation.ThreadSafe not found
升级log4j到log4j2报错:cannot access org.apache.http.annotation.NotThreadSafe的更多相关文章
- 启动报错:Access denied for user 'root'@'localhost' (using password:YES)
项目启动报错:Access denied for user 'root'@'localhost' (using password:YES) 原因:root帐户默认不开放远程访问权限,所以需要修改一下相 ...
- 二、Spring Boot 中maven中dependencies所有的jar包都报红,install报错(https://repo.maven.apache.org/maven2): Not authorized , ReasonPhrase:Authorizatio
问题一:现象:打开SpringBoot项目后,所有依赖包都报红色波浪线 1.install报错(https://repo.maven.apache.org/maven2): Not authorize ...
- HBase启动报错:ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet
今天进入hbase shell中输入命令报错:ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is no ...
- 解决报错:The import javax.servlet.annotation cannot be resolved
maven项目,引入javax.servlet.annotation.WebServlet的jar包,使用@WebServlet注解来实现对传统web.xml中servlet和url的映射 报错:Th ...
- tomcat关闭时Log4j2报错 Log4j Log4j2-TF-4-Scheduled-1 memory leak
出错信息: 23-Sep-2017 17:43:18.964 警告 [main] org.apache.catalina.loader.WebappClassLoaderBase.clearRefer ...
- Log4j2报错ERROR StatusLogger Unrecognized format specifier
问题 使用maven-shade-plugin或者maven-assembly-plugin插件把项目打成一个可执行JAR包时,如果你引入了log4j2会出现如下问题: ERROR StatusLog ...
- 2019.3.5 控制台输出log4j得有些报错信息
报错内容如下 log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.Sp ...
- 升级xcode8之后出现报错提示,提示swift版本问题
最近Xcode升级了,出现了各种蛋疼的错误提示,今天遇到个导入框架出现了提示Swift版本的问题,具体如下: "Use Legacy Swift Language Version" ...
- Android AS升级3.1 编译报错:The SourceSet 'instrumentTest' is not recognized by the Android Gradle Plugin.
AndroidStudio升级到3.1后编译报错:The SourceSet ‘instrumentTest’ is not recognized by the Android Gradle Plug ...
随机推荐
- mac 中安装redis 以及 安装php-redis扩展过程详细记录
1. 通过homebrew 安装 redis sodu brew install redis 2. 安装后执行开启redis,采用默认配置, 默认配置只有本地(127.0.0.1)可以访问.需要远程访 ...
- 关于MySQL的information_schema库简单介绍及实际应用
本文简介 写本文主要是围绕下面几点进行的. 1.information_schema数据库到底是做什么用的? 2.执行alter table 表名 modify column 字段名 类型 这个sql ...
- android DHCP流程【转】
本文转载自:http://blog.csdn.net/myvest/article/details/51483647 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 1 ...
- [HAOI 2012] Road
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2750 [算法] 考虑计算每个点对每条边的贡献 对于每个点首先运行SPFA或Dijks ...
- LiveCD、LiveDVD和BinDVD区别在哪里
本文转载自: http://www.kankanews.com/ICkengine/archives/86968.shtml 1.CentOS系统镜像有两个,安装系统只用到第一个镜像即CentOS-6 ...
- BZOJ2599:[IOI2011]Race
浅谈树分治:https://www.cnblogs.com/AKMer/p/10014803.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem. ...
- Boost-ioservices介绍
IO模型 io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象). asio::io_service i ...
- HDU acm1028 整数划分 递归问题(递推)
我们用递归+记忆化的方法来解决普通整数划分问题:定义 f(n,m)为将整数n划分为一系列整数之和,其中加数 最大不超过m. 得到下面的递推关系式: 当n==1 || m==1 只有一种划分,即 1 或 ...
- ceph之ceph-client安装
1.安装ceph-client ceph-deploy install ceph-client 2.创建块设备 [root@mon1 ~]# rbd create test1 --image-form ...
- Keil BUG 导致读字库时,无法显示某些汉字解决办法
原因在于:KEIL C51 的一个汉字BUG,keil c51在编译的时候会将0xfd的字符(有些汉字含该字符的内码)过滤, 最佳解决方案:打补丁,用 晓奇工作室出的补丁 cckeilvxx.exe ...