如何从引用BOM的Maven项目中获取BOM内依赖的版本信息?
获取BOM管理的依赖版本并填入POM的description标签
以下是两种无需生成额外文件、符合BOM设计初衷的解决方案:
方案一:使用Maven Dependency Plugin的properties目标
这个目标会将指定依赖的版本注入为Maven会话属性,直接在POM中引用即可:
- 在项目的
build/plugins中添加插件配置,绑定到生命周期的initialize阶段,确保属性在POM处理前已就绪:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.6.1</version> <executions> <execution> <id>resolve-bom-versions</id> <phase>initialize</phase> <goals> <goal>properties</goal> </goals> <configuration> <!-- 精确指定要获取版本的依赖,避免解析所有依赖 --> <includeGroupIds>org.apache.commons</includeGroupIds> <includeArtifactIds>commons-lang3</includeArtifactIds> </configuration> </execution> </executions> </plugin>
- 在
description标签中直接引用生成的属性:
<description>本项目使用 commons-lang3 版本:${org.apache.commons:commons-lang3:version}</description>
方案二:使用Maven Help Plugin的evaluate目标
通过表达式直接从项目的依赖管理上下文提取版本,更灵活:
- 添加插件配置,同样绑定到
initialize阶段:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-help-plugin</artifactId> <version>3.4.0</version> <executions> <execution> <id>extract-commons-lang3-version</id> <phase>initialize</phase> <goals> <goal>evaluate</goal> </goals> <configuration> <!-- 表达式定位BOM中管理的依赖版本 --> <expression>${project.dependencyManagement.dependencies[groupId='org.apache.commons',artifactId='commons-lang3'].version}</expression> <!-- 将结果存入自定义属性,方便引用 --> <property>commons-lang3.version</property> </configuration> </execution> </executions> </plugin>
- 在
description中引用自定义属性:
<description>本项目使用 commons-lang3 版本:${commons-lang3.version}</description>
两种方案都直接利用Maven自身的依赖管理机制获取版本,不会破坏BOM统一管控版本的设计,执行mvn clean install等命令时,description会自动填充正确的版本号。
内容的提问来源于stack exchange,提问作者nnevva0
相关产品推荐
相关产品推荐

