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

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.lryc.cn/news/2402617.html

相关文章:

  • Tomcat全方位监控实施方案指南
  • 开源PHP在线客服系统源码搭建教程
  • centos7升级glibic-2.28
  • 在Docker里面运行Docker
  • 设计模式复习小结
  • To be or Not to be, That‘s a Token——论文阅读笔记——Beyond the 80/20 Rule和R2R
  • 【基础】每天掌握一个Linux命令 - awk
  • 《UE5_C++多人TPS完整教程》学习笔记37 ——《P38 变量复制(Variable Replication)》
  • AWS API Gateway配置日志
  • Towards Open World Object Detection概述(论文)
  • 轻松备份和恢复 Android 系统 | 4 种解决方案
  • 具备强大的数据处理和分析能力的智慧地产开源了
  • RK3588和FPGA桥片之间IO电平信号概率性不能通信原因
  • 【iSAQB软件架构】软件架构中构建块的视图:黑箱、灰箱和白箱及其交互机制
  • .net jwt实现
  • LangChain【7】之工具创建和错误处理策略
  • 如何在电脑上轻松访问 iPhone 文件
  • Eureka REST 相关接口
  • C语言字符数组输入输出方法大全(附带实例)
  • 短视频矩阵SaaS系统:开源部署与核心功能架构指南
  • 每日算法 -【Swift 算法】电话号码字母组合
  • 深入解析YUM与DNF:RPM包管理器的架构演进与功能对比
  • 解决cocos 2dx/creator2.4在ios18下openURL无法调用的问题
  • 精益数据分析(94/126):30/10/10用户参与法则与定价策略的科学制定
  • oss:上传图片到阿里云403 Forbidden
  • Windows系统中如何使用符号链接将.vscode等配置文件夹迁移到D盘(附 CMD PowerShell 双版本命令)
  • 4. 数据类型
  • MySQL基础(二)SQL语言、客户端工具
  • 【贪心、DP、线段树优化】Leetcode 376. 摆动序列
  • CppCon 2015 学习:C++ in the audio industry