当前位置: 首页 > news >正文

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

文章目录

  • 1、背景
  • 2、解决
  • 3、一点思考
  • 4、环境升级导致AOP失效
  • 5、okhttp Bean找不到
  • 6、总结

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

1、背景

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

<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>

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

mvn dependency:tree | grep jna

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

2、解决

首先想到直接排除依赖

<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里管理下版本

<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找不到了

<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>${okhttp3.version}</version></dependency>

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

spring:cloud:openfeign:okhttp:enabled: true

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

<okhttp3.version>4.12.0</okhttp3.version>

6、总结

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

http://www.lqws.cn/news/170587.html

相关文章:

  • Redis——1、服务端高并发分布式结构演进之路
  • OpenAI对抗法庭命令:捍卫ChatGPT用户隐私之战
  • 分布式Session处理的五大主流方案解析
  • k8s下离线搭建elasticsearch
  • 408第一季 - 数据结构 - 线性表II
  • uniapp 集成腾讯云 IM 消息搜索功能
  • 大量企业系统超龄服役!R²AIN SUITE 一体化企业提效解决方案重构零售数智化基因
  • 如何更改默认 Crontab 编辑器 ?
  • Unity基于GraphView的可视化关卡编辑器开发指南
  • 使用VuePress2.X构建个人知识博客,并且用个人域名部署到GitHub Pages中
  • Podman 和 Docker
  • 每日算法刷题Day24 6.6:leetcode二分答案2道题,用时1h(下次计时20min没写出来直接看题解,节省时间)
  • 微信小程序- 用canvas生成排行榜
  • 本地部署Qwen3
  • ComfyUI 中如何使用 Depth ControlNet SD1.5
  • 基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
  • 27.【新型数据架构】-数据共享架构
  • 如何让其他品牌更难转化走我们的用户?
  • 从0到1写一个适用于Node.js的User Agent生成库
  • GWO-LSSVM-Adaboost灰狼算法GWO优化最小二乘支持向量机LSSVM分类预测!
  • AI如何改变IT行业
  • Python备忘
  • ES6——数组扩展之Set数组
  • onSaveInstanceState() 和 ViewModel 在数据保存能力差异
  • ES6——对象扩展之Set对象
  • 详细介绍uni-app中Composition API和Options API的使用方法
  • uniapp Vue2 获取电量的独家方法:绕过官方插件限制
  • uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
  • 深度学习环境配置指南:基于Anaconda与PyCharm的全流程操作
  • 前端面试题之ES6保姆级教程