Maven持续集成(Continuous integration,简称CI)版本友好管理

news/2024/12/22 23:26:12/

从Maven 3.5.0-beta-1 版本开始可以在pom文件中使用 r e v i s i o n 、 {revision}、 revision{sha1}、${changelist}做为版本的占位符。

revision_4">一、单module简单使用${revision}的场景
<project><modelVersion>4.0.0</modelVersion><parent><groupId>org.apache</groupId><artifactId>apache</artifactId><version>18</version></parent><groupId>org.apache.maven.ci</groupId><artifactId>ci-parent</artifactId><name>First CI Friendly</name><version>${revision}</version>...
</project>

上述项目可以使用如下指令构建项目:

mvn -Drevision=1.0.0-SNAPSHOT clean package

随着项目的复杂度增加,上面的方案将会变的很麻烦,因此另外一种解决方案是简单地在pom文件中使用一个属性,如下所示:

<project><modelVersion>4.0.0</modelVersion><parent><groupId>org.apache</groupId><artifactId>apache</artifactId><version>18</version></parent><groupId>org.apache.maven.ci</groupId><artifactId>ci-parent</artifactId><name>First CI Friendly</name><version>${revision}</version>...<properties><revision>1.0.0-SNAPSHOT</revision></properties>
</project>

现在就可以简单的使用mvn clean package指令对项目进行打包。当然你也可以使用如下指令更改版本:

mvn -Drevision=2.0.0-SNAPSHOT clean package

如果希望对版本进行更复杂精细的控制,可以使用 r e v i s i o n 、 {revision}、 revision{sha1}、${changelist},如下示例:

<project><modelVersion>4.0.0</modelVersion><parent><groupId>org.apache</groupId><artifactId>apache</artifactId><version>18</version></parent><groupId>org.apache.maven.ci</groupId><artifactId>ci-parent</artifactId><name>First CI Friendly</name><version>${revision}${sha1}${changelist}</version>...<properties><revision>1.3.1</revision><changelist>-SNAPSHOT</changelist><sha1/></properties>
</project>

如果你想定义2.0.0-SNAPSHOT版本,只需要使用如下命令即可实现:

mvn -Drevision=2.0.0 clean package

如果想定义1.3.1版本,可以通过如下命令实现:

mvn -Dchangelist= clean package

或者想发布另一个版本2.7.8:

mvn -Drevision=2.7.8 -Dchangelist= clean package
二、多个module设置

父模块module pom定义如下:

<project><modelVersion>4.0.0</modelVersion><parent><groupId>org.apache</groupId><artifactId>apache</artifactId><version>18</version></parent><groupId>org.apache.maven.ci</groupId><artifactId>ci-parent</artifactId><name>First CI Friendly</name><version>${revision}</version>...<properties><revision>1.0.0-SNAPSHOT</revision></properties><modules><module>child1</module>..</modules>
</project>

子模块如下:

<project><modelVersion>4.0.0</modelVersion><parent><groupId>org.apache.maven.ci</groupId><artifactId>ci-parent</artifactId><version>${revision}</version></parent><groupId>org.apache.maven.ci</groupId><artifactId>ci-child</artifactId>...<dependencies><dependency><groupId>org.apache.maven.ci</groupId><artifactId>child2</artifactId><version>${project.version}</version></dependency></dependencies>
</project>

这个时候如果尝试使用 r e v i s i o n 替换 {revision}替换 revision替换{project.version}将会失败。

如果想使用上述设置部署或安装项目,必须使用flatten-maven-plugin 插件,如下:

<project><modelVersion>4.0.0</modelVersion><parent><groupId>org.apache</groupId><artifactId>apache</artifactId><version>18</version></parent><groupId>org.apache.maven.ci</groupId><artifactId>ci-parent</artifactId><name>First CI Friendly</name><version>${revision}</version>...<properties><revision>1.0.0-SNAPSHOT</revision></properties><build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>flatten-maven-plugin</artifactId><version>1.1.0</version><configuration><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></plugins></build><modules><module>child1</module>..</modules>
</project>

参考文档:https://maven.apache.org/maven-ci-friendly.html
开源SDK:https://github.com/mingyang66/spring-parent


http://www.ppmy.cn/news/1522039.html

相关文章

使用 Cloudflare R2 代替 AWS S3……

欢迎来到雲闪世界。目录 1. AWS S3 与 Cloudflare R2 2.什么是 AWS S3&#xff1f; 3.什么是 Cloudflare R2&#xff1f; 4. AWS S3 定价 ∘ AWS S3 定价详情 (美国东部 - 弗吉尼亚北部地区) 5. Cloudflare R2 定价 ∘ Cloudflare R2 定价详情 (美国地区) 6.免费套餐&#xff…

Patlibc———更快捷的更换libc

起初是为了简化做pwn题目时&#xff0c;来回更换libc的麻烦&#xff0c;为了简化命令&#xff0c;弄了一个小脚本&#xff0c;可以加入到/usr/local/bin中&#xff0c;当作一个快捷指令&#x1f522; 这个写在了tools库&#xff08;git clone https://github.com/CH13hh/tools…

数据分析:numpy02

目录 1、NumPy 切片和索引 2、数组元素的添加与删除 3、修改数组形状 4、numpy随机数 1、NumPy 切片和索引 ndarray对象的内容可以通过索引或切片来访问和修改&#xff0c;与 Python 中 列表list 的切片操作一样。 ndarray 数组可以基于 0 - n 的下标进行索引&#xff0c;切片…

Redis位图BitMap

一、为什么使用位图&#xff1f; 使用位图能有效实现 用户签到 等行为&#xff0c;用数据库表记录签到&#xff0c;将占用很多存储&#xff1b;但使用 位图BitMap&#xff0c;就能 大大减少存储占用 二、关于位图 本质上是String类型&#xff0c;最小长度8位&#xff08;一个字…

k8s API资源对象

API资源对象Deployment 最小的资源是pod&#xff0c;deployment是多个pod的集合&#xff08;多个副本实现高可用、负载均衡等&#xff09;。 使用yaml文件来配置、部署资源对象。 Deployment YAML示例&#xff1a; vi ng-deploy.yaml apiVersion: apps/v1 kind: Deployment…

JS设计模式之“分即是合” - 建造者模式

引言 当我们在进行软件编程时&#xff0c;常常会遇到需要创建复杂对象的情况。这些对象可能有多个属性&#xff0c;属性之间存在依赖关系&#xff0c;或需要按照特定的骤来创建。在这种情况下&#xff0c;使用建造者模式&#xff08;Builder Pattern&#xff09;可以提供一种活…

给A的平方根矩阵乘高斯随机向量

所以给A的平方根矩阵乘高斯随机向量&#xff0c;目的是得到很多矩阵&#xff0c;这些矩阵的空间平均 A

嵌入式软件--51单片机 DAY 4

一、蜂鸣器 当电流通过线圈时会产生电磁场&#xff0c;电磁场与永磁体相互作用&#xff0c;从而使金属膜产生震动而发声。为使金属膜持续震动&#xff0c;蜂鸣器需要使用震荡电路进行驱动。有些蜂鸣器元件内部自带震荡驱动电路&#xff0c;这种蜂鸣器叫做有源蜂鸣器&#xff0…