自学内容网 自学内容网

flatten-maven-plugin 统一版本管理插件

前言

由于项目不规范,项目直接引用快照版本的jar包去发布。如果远程仓库没问题,那么引用的时候项目也不会有问题,但如果远程仓库的快照被删除那么 项目就会找不到依赖,只能由本地代码再推一分jar包上去。因为仓库对快照版本的jar没有备份机制。基于上述原因,每次jar有修改后,必须修改快照为release版本的jar。
项目结构一般会有子pom会引用父pom,若每次更新pom后,那么父pom的版本也需要修改才能推到远程,父pom的版本改后,所有引用他的子pom都需要修改。
固需要统一管理版本将项目的版本,将项目父pom、子pom版本抽成一个变量来管理,这样只需改一处,其它pom版本就会变部变更。

一、将所有pom引用的版本号统一由一个变量管理

一个子pom如下:

<parent>
        <artifactId>hub-message-parent</artifactId>
        <groupId>com.clock.hub</groupId>
        <version>${revision}</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>message-service-facade</artifactId>
    <!--这里是暴露的jar版本引用,就是指向了 上面parent 的版本号-->
    <version>${project.parent.version}</version>

主pom中定义的变量:
这样每次只用修改这里的变量,就可以修改所有pom

<properties>
        <revision>4.3.12.RELEASE</revision>
 </properties>       

但实际上,子模块打包后生成的 pom 中引用父项目定义的属性的占位符不会被解析为实际定义的属性值。那么假如该子模块是一个 pom 这样的可以单独提供服务的模块,打包后推到了远端,其他人在引入后刷新依赖就会发生 Non-resolvable POM 异常。

二、问题原因

直接将上述子pom打包后,revision 占位符将不会被替换。
在另一个项目引入该pom的时候就会报错

三、引入 flatten-maven-plugin 解决

flatten-maven-plugin 解决
在父pom中引入插件如下:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>flatten-maven-plugin</artifactId>
    <version>1.1.0</version>
    <configuration>
        <!-- 是否更新pom文件,此处还有更高级的用法 -->
        <updatePomFile>true</updatePomFile>
        <flattenMode>resolveCiFriendliesOnly</flattenMode>
    </configuration>
    <executions>
        <execution>
            <id>flatten</id>
            <phase>process-resources</phase>
            <goals>
                <goal>flatten</goal>
            </goals>
        </execution>
        <execution>
            <id>flatten.clean</id>
            <phase>clean</phase>
            <goals>
                <goal>clean</goal>
            </goals>
        </execution>
    </executions>
</plugin>

重新打包子pom如下:

<parent>
        <artifactId>hub-message-parent</artifactId>
        <groupId>com.clock.hub</groupId>
        <version>1-message-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>message-service-facade</artifactId>
    <!--这里是暴露的jar版本引用,就是指向了 上面parent 的版本号-->
    <version>1-message-SNAPSHOT</version>

原文地址:https://blog.csdn.net/lh87270202/article/details/145275012

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!