如何通过CLI命令获取Maven项目中指定artifact的实际使用版本
你当前使用的-Dartifact参数的作用是查询仓库中对应构件的信息,而非当前项目依赖树的解析结果,因此只能返回最新可用版本,无法拿到项目实际依赖的版本。你可以使用以下两种方案实现需求:
方案1:使用maven-dependency-plugin的list目标过滤(通用方案)
该方案不依赖版本的定义方式,只要是项目解析后实际引入的依赖都可以正常获取版本:
RESULT+=$(mvn org.apache.maven.plugins:maven-dependency-plugin:3.6.0:list -DincludeGroupIds=$GROUP_ID -DincludeArtifactIds=$ARTIFACT_ID -q -DforceStdout | grep -oP '(?<=^\[INFO\] ).*' | cut -d: -f4) echo "$RESULT"
参数说明:
-DincludeGroupIds、-DincludeArtifactIds用于过滤仅返回指定的构件结果- 后续的grep、cut命令用于提取返回结果中的版本字段,Windows环境可替换为对应的字符串处理命令
- 如果是多模块项目,可追加
-pl 子模块相对路径指定查询的模块,避免返回多个模块的依赖结果
方案2:通过properties查询(仅适用版本由properties管理的场景)
如果目标依赖的版本是在pom的<properties>标签中统一定义的,可直接通过help插件查询对应属性:
RESULT+=$(mvn org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate -Dexpression=对应版本的属性名 -q -DforceStdout) echo "$RESULT"
该方案仅适用于版本通过properties定义的场景,通用性弱于方案1
内容的提问来源于stack exchange,提问作者DarthSiedewurst
相关产品推荐
相关产品推荐

