背景介绍:
当一个父模块包含多个子模块时,版本修改是一个相当繁琐的事情,为避免遗漏,采用版本统一管理方式。
在 Maven 的 pom.xml 文件中使用 标签时, 子标签的值通常是一个字符串,这个字符串可以是直接指定的版本号,也可以是一个变量或者 Maven 属性。revision 是 Maven 2.1 引入的一个特殊属性,它用于引用父项目中的 标签的值。这意味着,当你在子项目的 pom.xml 中使用 ${revision} 时,Maven 会自动将其替换为父项目的版本号。
Maven官方文档说:自 Maven 3.5.0-beta-1 开始,可以使用 ${revision}, ${sha1} and/or ${changelist} 这样的变量作为版本占位符。
链接:https://maven.apache.org/docs/3.5.0-beta-1/release-notes.html
使用步骤:
父模块的pom文件
<groupId>com.springbreeze</groupId>
<artifactId>spring-breeze</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<name>${project.artifactId}</name>
<description>spring-breeze</description>
<!-- 管理子模块 -->
<modules>
<module>springbreeze-common</module>
</modules>
<!-- 用来将所需依赖的版本号定义为属性 -->
<properties>
<revision>0.0.1-SNAPSHOT</revision>
</properties>
子模块的pom文件
<parent>
<groupId>com.springbreeze</groupId>
<artifactId>spring-breeze</artifactId>
<version>${revision}</version>
</parent>
<artifactId>springbreeze-common</artifactId>
<packaging>pom</packaging>
<description>spring-breeze 公共聚合模块</description>
Tips:或者使用组合属性来表示
<version >$frevision}${sha1}${changelist}</version >
<properties >
<!--通过属性来配置占位符,可被命令行的参数覆盖,如:-Drevision=0.0.1 -->
<revision >0.0.1</revision >
<changelist >-SNAPSHOT</changelist >
<sha1/>
</properties >
通过以上的配置,执行 mvn package 便能完成打包。
但是,如果你想通过 mvn install 或者 mvn deploy 命令将生成的JAR包安装到存储库(repository),则必须配合插件 flatten-maven-plugin 来完成。
如果你不使用 flatten-maven-plugin,则JAR包依然会被安装到存储库,但该JAR包将不能被Maven使用,因为安装时会把原始 pom.xml 的内容安装到存储库中(即占位符并
未被替换),所以maven将不能定位到该JAR的坐标。
在父模块中引入插件flatten-maven-plugin
<!-- 添加flatten-maven-plugin插件 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<!-- 这里的版本号也可以使用引用的方式 -->
<version>1.6.0</version>
<inherited>true</inherited>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
<configuration>
<!-- 避免IDE将 .flattened-pom.xml 自动识别为功能模块 -->
<updatePomFile>true</updatePomFile>
<flattenMode>resolveCiFriendliesOnly</flattenMode>
<pomElements>
<parent>expand</parent>
<distributionManagement>remove</distributionManagement>
<repositories>remove</repositories>
</pomElements>
</configuration>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
修改.gitignore文件,增加一行.flattened-pom.xml;
可以换源提高下载速度
<!-- 使用 huawei / aliyun 的 Maven 源,提升下载速度 -->
<repositories>
<!-- <repository>
<id>huaweicloud</id>
<name>huawei</name>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</repository>-->
<repository>
<id>aliyunmaven</id>
<name>aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
</repositories>
评论前必须登录!
注册