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)!