问题与分析

今天把项目的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打包操作,结果编译成功,顺利打包。

参考链接

最新文章

  1. VB中的API详解
  2. python多线程网络编程
  3. sql语句感想
  4. mysql 截断
  5. POJ C程序设计进阶 编程题#3:运算符判定
  6. 关于jQuery中,animate、slide、fade等动画的连续触发、滞后反复执行的bug的个人解决办法
  7. [Javascript] The Array filter method
  8. 原创C# 枚举 多状态 操作
  9. Rectangle Area——LeetCode
  10. 解决CentOS(RedHat)中sendmail和sm-client启动慢故障(转)
  11. Scala 控制结构
  12. Angularjs循环二维数组
  13. 每天一个linux命令(62):sh命令 /Linux中执行shell脚本的4种方法总结
  14. 【SignalR学习系列】3. SignalR实时高刷新率程序
  15. 再起航,我的学习笔记之JavaScript设计模式24(备忘录模式)
  16. 手写particles
  17. IDEA - Debug - not supported in -source 1.5
  18. Python爬虫基础之BeautifulSoup
  19. day 04
  20. 单页应用 - Token 验证

热门文章

  1. 阿里妈妈-RAP项目的实践(2)
  2. Remote Debugging Android Devices
  3. Centos查看端口占用情况
  4. POJ 2485 Highways(最小生成树+ 输出该最小生成树里的最长的边权)
  5. ping请求超时的解决方法
  6. Transaction事务注解和DynamicDataSource动态数据源切换问题解决
  7. ubuntu的ufw如何开放特定端口?
  8. hdu-5762 Teacher Bo(抽屉原理+暴力)
  9. hdu-5738 Eureka(组合计数+极角排序)
  10. 【原】putty配置下载