Maven相关问题:jna版本与ES冲突 + aop失效

文章目录

记录一些Maven依赖相关的思考

1、背景

做一个监控指标收集,用一下jna依赖:

xml 复制代码
<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>${dev.jna.version}</version>
    <!-- <dev.jna.version>5.12.1</dev.jna.version> -->
</dependency>

发现采集失败,根据错误信息,怀疑是依赖问题:

shell 复制代码
mvn dependency:tree | grep jna

根据返回结果,发现elastic search的依赖种也有用到jna,依赖冲突了

2、解决

首先想到直接排除依赖

xml 复制代码
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <exclusions>
        <!-- 排除 Elasticsearch 自带的旧版 JNA -->
        <exclusion>
            <groupId>org.elasticsearch</groupId>
            <artifactId>jna</artifactId>
        </exclusion>
    </exclusions>
</dependency>

写完发现,这个jna坐标还是es自己的,应该是es自己做了一些二次开发和补丁,这样直接排除,大概率ES自身的功能要受影响,于是,考虑:

  • 升级整个 Elasticsearch 依赖版本,使其自带的jna和我需要的版本不再冲突
  • 选择一个jna的版本,兼容ES

最后,打开官方仓库:https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch/7.17.28,升级ES到7.17.28版本,并且父pom里管理下版本

xml 复制代码
<dependencyManagement>
	<dependency>
	    <groupId>net.java.dev.jna</groupId>
	    <artifactId>jna</artifactId>
	    <version>${dev.jna.version}</version>
	    <!-- <dev.jna.version>5.12.1</dev.jna.version> -->
	</dependency>
</dependencyManagement>

3、一点思考

排除依赖前,考虑下影响,比如:

  • 版本不兼容问题:要是引入的其他 JNA 版本和 Elasticsearch 不兼容,可能会出现NoClassDefFoundError、LinkageError等错误

  • 功能缺失情况:对于这种二开依赖的,更要注意换依赖后原来的一些二开的补丁功能丢失的问题

4、环境升级导致AOP失效

系统近来在做升级,JDK从8升级到了JDK 17,相应的SpringBoot和SpringCloud版本也在更新迭代,升级后,新开发了一个AOP,结果发现一直不生效,首先排除常见的原因,比如:

  • 方法是private,代理失败
  • 内部调用
  • 没有enable AOP功能

等等,因为之前的AOP功能都是正常的,因此考虑是否是版本升级导致:搜索相关依赖,发现有aspectjweaver依赖,但没有spring-boot-starter-aop依赖,回到升级前,发现aop的依赖在open-feign里:


openfeign-core,在3.1.0是有aop依赖的,但升级到4.2.1版本后,aop不再包含了

因此,需要额外手动引入下spring-boot-starter-aop依赖

5、okhttp Bean找不到

同样的,升级后,服务启动报错okhttp Bean找不到了

xml 复制代码
<dependency>
     <groupId>com.squareup.okhttp3</groupId>
     <artifactId>okhttp</artifactId>
     <version>${okhttp3.version}</version>
 </dependency>

升级前,版本是3.14.9,搭配下面这配置

yaml 复制代码
spring:
  cloud:
    openfeign:
      okhttp:
        enabled: true

升级后,启动发现okhttp Bean找不到,升级了下依赖版本解决

java 复制代码
<okhttp3.version>4.12.0</okhttp3.version>

6、总结

依赖大升级,比如从2.x到3.x,一些API和核心类难免会被重构优化,此时,就会导致一些类找不到、原本包含的依赖升级后需要你自己引入一下、版本冲突导致一些自动装配失效等等一系列的问题,注意兼容和影响范围

相关推荐
霸道流氓气质1 小时前
在Qoder中指定JDK和Maven运行AI学习的SpringBoot项目的完整指南
java·人工智能·maven
GISer_Jing1 小时前
Claude Code 技术深度解析:一个活在终端里的 AI 编程助手
人工智能·elasticsearch·前端框架
西敏寺的乐章1 小时前
01-倒排索引原理-搜索引擎为什么能秒搜
java·elasticsearch·搜索引擎
小江的记录本11 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
Ws_18 小时前
Git + Gerrit 第四课:合并冲突解决
大数据·elasticsearch·搜索引擎
我是一只码蚁20 小时前
记一次苍穹外卖项目 Maven 编译报错的排查与解决全过程
java·经验分享·笔记·后端·架构·maven
Elastic 中国社区官方博客1 天前
Elasticsearch:跨数据库与业务系统进行搜索
大数据·数据库·人工智能·elasticsearch·搜索引擎·全文检索
开开心心就好1 天前
180套模板的图片艺术拼接实用工具
linux·服务器·网络·spring·智能手机·maven·excel
极光技术熊1 天前
最新Elasticsearch 版本演进与 Java 客户端接入完全指南
elasticsearch
Elastic 中国社区官方博客1 天前
从平均值到任意百分位:Elasticsearch 在 ES|QL 中提供原生 exponential histogram 支持
大数据·人工智能·elasticsearch·搜索引擎·信息可视化·全文检索·数据可视化