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

本文主要是介绍Maven持续集成(Continuous integration,简称CI)版本友好管理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

一、单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

这篇关于Maven持续集成(Continuous integration,简称CI)版本友好管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134387

相关文章

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

在Node.js中使用.env文件管理环境变量的全过程

《在Node.js中使用.env文件管理环境变量的全过程》Node.js应用程序通常依赖于环境变量来管理敏感信息或配置设置,.env文件已经成为一种流行的本地管理这些变量的方法,本文将探讨.env文件... 目录引言为什么使php用 .env 文件 ?如何在 Node.js 中使用 .env 文件最佳实践引

SpringBoot集成WebService(wsdl)实践

《SpringBoot集成WebService(wsdl)实践》文章介绍了SpringBoot项目中通过缓存IWebService接口实现类的泛型入参类型,减少反射调用提升性能的实现方案,包含依赖配置... 目录pom.XML创建入口ApplicationContextUtils.JavaJacksonUt

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的