为何Maven的dependencyManagement无法修复Enforcer依赖收敛错误?
问题原因分析
Maven的dependencyManagement仅对groupId和artifactId完全匹配的依赖生效,你的问题核心在于混淆了两个独立的依赖项:
- 你在
dependencyManagement中配置的是net.java.dev.jna:jna-platform的版本 - 但
com.microsoft.azure:msal4j-persistence-extension引入的是net.java.dev.jna:jna——这是artifactId完全不同的依赖,因此dependencyManagement里的配置不会对它产生作用
jna和jna-platform是关联但独立的Maven依赖,Maven会将它们视为完全不同的依赖项处理。你仅统一了jna-platform的版本到5.14.0,但jna的版本仍由msal4j-persistence-extension的依赖声明控制(即5.13.0),而jna-platform 5.14.0本身大概率依赖更高版本的jna,最终导致依赖树中出现不同版本的jna,触发Enforcer插件的收敛错误。
解决办法
在dependencyManagement中同时声明net.java.dev.jna:jna和net.java.dev.jna:jna-platform的版本,确保两个依赖的版本统一:
<dependencyManagement> <dependencies> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>5.14.0</version> </dependency> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna-platform</artifactId> <version>5.14.0</version> </dependency> </dependencies> </dependencyManagement>
这样所有间接引入的jna和jna-platform都会强制使用5.14.0版本,解决依赖收敛问题。
内容的提问来源于stack exchange,提问作者oligofren
相关产品推荐
相关产品推荐

