Spring Boot项目Maven插件管理:无法强制指定commons-io目标版本
解决Maven Compiler Plugin依赖的commons-io版本覆盖问题
核心问题说明
你在pluginManagement中配置的是Maven插件自身运行时的依赖,而mvn dependency:tree -Dverbose展示的是项目业务代码的依赖树,二者属于不同的依赖上下文。mvn help:effective-pom显示版本已更新,说明插件的依赖配置是生效的,你看到的2.12.0是项目其他依赖间接引入的版本。
分场景解决方案
场景1:让Maven Compiler Plugin运行时使用commons-io 2.14.0
修正插件配置,移除无效的自排除规则(你在commons-io依赖里排除自身完全没必要):
<pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.13.0</version> <dependencies> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.14.0</version> </dependency> </dependencies> </plugin> </plugins> </pluginManagement>
验证插件实际依赖版本:
执行以下命令查看插件的依赖树:
mvn org.apache.maven.plugins:maven-dependency-plugin:3.6.1:resolve-plugins
在输出中找到maven-compiler-plugin的依赖项,即可确认commons-io的实际版本。
场景2:让项目业务代码强制使用commons-io 2.14.0
如果是项目代码需要使用高版本,需在dependencyManagement中锁定版本,覆盖所有间接依赖:
<dependencyManagement> <dependencies> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.14.0</version> </dependency> </dependencies> </dependencyManagement>
之后执行mvn dependency:tree -Dverbose,就能看到commons-io版本已更新为2.14.0。
关键提醒
插件依赖与项目依赖是相互独立的:插件运行时使用自身依赖,不会影响项目代码的依赖;项目依赖的版本也不会改变插件的依赖版本,按需配置即可。
内容的提问来源于stack exchange,提问作者Akash Jain
相关产品推荐
相关产品推荐

