幽兰生空谷
--绝世独自开

Maven使用${revision}属性实现父子多模块版本统一管理

背景介绍:

当一个父模块包含多个子模块时,版本修改是一个相当繁琐的事情,为避免遗漏,采用版本统一管理方式。

在 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>
赞(1) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Maven使用${revision}属性实现父子多模块版本统一管理》
文章链接:http://www.itheibai.com/archives/1596
免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途,网站会员捐赠是您喜欢本站而产生的赞助支持行为,仅为维持服务器的开支与维护,全凭自愿无任何强求。

评论 抢沙发

评论前必须登录!

 

养成“打赏”的好习惯,从我做起!

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册