Maven - 使用maven-release-plugin规范化版本发布
文章目录
- Maven Release plugin – Introduction
- Maven Release plugin – Plugin Documentation
- Maven Release plugin – Usage
- 实战案例
Maven Release plugin – Introduction
Maven Release Plugin(Maven 发布插件)是一个用于帮助在Maven项目中执行版本发布流程的插件。它的主要功能是简化项目版本的发布和管理,确保版本号的正确性,并自动处理与版本发布相关的任务。
通常情况下,软件项目的版本管理是一个复杂的过程,需要考虑版本号的增加、代码库的分支、标签的创建、文档的更新等一系列任务。Maven Release Plugin 旨在通过自动化这些任务,减少人为错误,并提供一个一致性的发布过程。
Maven Release Plugin 提供了以下主要步骤和功能:
-
准备阶段(Prepare Phase):
- 检查代码库的状态,确保没有未提交的修改。
- 自动增加项目版本号,比如从 1.0.0-SNAPSHOT 到 1.0.0。
- 创建一个用于发布的标签,以便后续的版本控制和追踪。
-
提交阶段(Perform Phase):
- 将已更新的版本号和标签提交到版本控制系统(例如 Git、Subversion)。
- 将项目构建、测试、打包,并生成发布包。
- 部署生成的发布包到 Maven 仓库,使其可供其他项目使用。
-
结束阶段:
- 恢复开发版本号(例如从 1.0.0 到 1.0.1-SNAPSHOT)。
- 提交恢复后的开发版本号到版本控制系统。
使用 Maven Release Plugin 的好处包括:
- 简化流程:自动化繁琐的版本管理任务,减少人为错误的可能性。
- 一致性:确保发布过程的一致性,所有发布都按照相同的规则执行。
- 版本控制:创建版本号标签,方便在未来查找和回溯特定版本的代码。
- 构建稳定性:在独立的构建环境中执行发布任务,降低与开发环境不一致导致的问题。
要使用 Maven Release Plugin,你需要在项目的 pom.xml 文件中配置插件,然后通过命令行或者集成开发环境的插件集成来触发插件的操作。需要注意的是,Maven Release Plugin 的配置和使用需要谨慎,特别是在团队协作的环境中,确保所有开发者都理解和遵循相应的发布流程。

当使用 Maven Release Plugin 时,通常会涉及到以下步骤和配置:
步骤 1:配置 Maven Release Plugin
在项目的 pom.xml 文件中,需要配置 Maven Release Plugin。以下是一个示例的插件配置:
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId><version>3.0.0</version><configuration><tagNameFormat>@{project.version}</tagNameFormat></configuration></plugin></plugins>
</build>
在上面的配置中,我们指定了 Maven Release Plugin 的版本为 3.0.0,并设置了一个标签名的格式,其中 @{project.version} 将被替换为项目的版本号。
步骤 2:执行发布流程
-
准备阶段(Prepare Phase):
执行以下命令来准备发布,这将包括版本号的增加和标签的创建:
mvn release:prepare插件将会提示你输入版本号、下一个开发版本号以及是否提交和推送这些变更。
-
提交阶段(Perform Phase):
在准备阶段完成后,执行以下命令来执行发布:
mvn release:perform这将会构建、测试、打包你的项目,并将生成的发布包部署到 Maven 仓库。
-
结束阶段:
在完成发布后,你可以执行以下命令来结束发布过程,并将开发版本号恢复:
mvn release:clean这将撤销之前所做的版本号和标签变更。
注意事项:
- 确保在执行发布过程前,所有未提交的修改都已提交或保存,以避免数据丢失。
- 插件的行为受项目的结构和构建流程影响,具体的配置和步骤可能因项目而异。
- 如果你使用的是版本控制系统(如 Git),请确保你具有适当的权限来创建标签和推送更改。
请注意,这只是一个简单的示例,实际使用中可能需要根据项目的需求进行更详细的配置。建议在使用 Maven Release Plugin 前阅读相关文档,了解各个配置参数的含义以及可能遇到的问题和解决方法。

该插件用于使用Maven发布项目,节省大量重复的手动工作。项目发布分为两个步骤:准备和执行。
https://maven.apache.org/maven-release/maven-release-plugin/

release:cleanClean up after a release preparation.release:preparePrepare for a release in SCM.release:prepare-with-pomPrepare for a release in SCM, and generate release POMs that record the fully resolved projects used.release:rollbackRollback a previous release.release:performPerform a release from SCM.release:stagePerform a release from SCM into a staging folder/repository.release:branchCreate a branch of the current project with all versions updated.release:update-versionsUpdate the versions in the POM(s).


Maven Release plugin – Plugin Documentation
https://maven.apache.org/maven-release/maven-release-plugin/plugin-info.html


You should specify the version in your project’s plugin configuration:
<project>...<build><!-- To define the plugin version in your parent POM --><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId><version>3.0.1</version></plugin>...</plugins></pluginManagement><!-- To use the plugin goals in your POM or parent POM --><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId></plugin>...</plugins></build>...
</project>
Maven Release plugin – Usage




https://gitee.com/-/ide/project/FutaoSmile/starter-fustack/edit/master/-/pom.xml
?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><packaging>pom</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.futao</groupId><artifactId>starter-fustack</artifactId><version>0.0.2-SNAPSHOT</version><name>starter-fustack</name><description>framework base springboot</description><modules><!--微信小程序--><module>fustack-wx-mini-program</module></modules><properties><java.version>1.8</java.version><spring-boot-admin.version>2.3.0</spring-boot-admin.version><maven.test.skip>true</maven.test.skip><maven.javadoc.skip>true</maven.javadoc.skip></properties><developers><developer><id>futao</id><email>1185172056@qq.com</email><name>一只特立独行的猪</name><roles><role>CEO</role><role>developer-be</role></roles><timezone>GMT +8</timezone><url>https://gitee.com/FutaoSmile</url></developer></developers><dependencies><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></dependency>.......</dependencies><dependencyManagement><dependencies><!--jwt start--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.11.2</version></dependency>......</dependencies></dependencyManagement><!-- <build>--><!-- <plugins>--><!-- <plugin>--><!-- <groupId>org.springframework.boot</groupId>--><!-- <artifactId>spring-boot-maven-plugin</artifactId>--><!-- </plugin>--><!-- </plugins>--><!-- </build>--><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>${java.version}</source><target>${java.version}</target><skip>true</skip></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId><configuration><!--<tagBase>https://github.com/FutaoSmile/starter-fustack</tagBase>--><!--是否自动为子模块分配父版本。如果设置为false,将提示用户输入每个子模块的版本。--><autoVersionSubmodules>true</autoVersionSubmodules><!--tag标签名--><tagNameFormat>release-by-maven-${version}</tagNameFormat></configuration></plugin></plugins></build><distributionManagement><repository><id>ishanggang-releases</id><url>https://maven.ishanggang.com/repository/maven-releases/</url></repository></distributionManagement><scm><!--可读的SCM地址--><!--<connection>scm:git:https://github.com/FutaoSmile/starter-fustack</connection>--><!--可写的SCM地址--><developerConnection>scm:git:https://github.com/FutaoSmile/starter-fustack</developerConnection><!--可以在浏览器中访问的scm地址--><!--<url>https://github.com/FutaoSmile/starter-fustack</url>--><!--设置tagName--><tag>V-release-0.0.1</tag></scm>
</project>
实战案例
使用自动化插件release来管理maven项目的版本发布

相关文章:
Maven - 使用maven-release-plugin规范化版本发布
文章目录 Maven Release plugin – IntroductionMaven Release plugin – Plugin DocumentationMaven Release plugin – Usage实战案例 Maven Release plugin – Introduction Maven Release Plugin(Maven 发布插件)是一个用于帮助在Maven项目中执行版…...
2023.8.29 关于性能测试
目录 什么是性能测试? 性能测试常见术语及其性能测试衡量指标 并发 用户数 响应时间 事务 点击率 吞吐量 思考时间 资源利用率 性能测试分类 基准性能测试 负载性能测试 压力性能测试 可靠性性能测试 性能测试执行流程 什么是性能测试? 性…...
基于MATLAB的径向基函数插值(RBF插值)(一维、二维、三维)
基于MATLAB的径向基函数插值(RBF插值)(一维、二维、三维) 0 前言1 RBF思路2 1维RBF函数2.1 参数说明2.1.1 核函数选择2.1.2 作用半径2.1.3 多项式拟合2.1.4 误差项(光滑项) 3 2维RBF函数4 3维RBF函数 惯例声…...
flume拦截器
flume拦截器代码 1.依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apach…...
vue、elementui控制前一级选择后,后一级才会有数据
<el-form-item label"废物类型:"><el-select clearable v-model"queryForm.hswCateType" placeholder"请选择" change"industryCategoryChange" focus"industryCategoryFocus"><el-option v-for&…...
亲测influxdb安装为window后台服务
InfluxDB 安装 64bit:https://dl.influxdata.com/influxdb/releases/influxdb-1.7.4_windows_amd64.zip 解压安装包 修改配置文件 [meta]# Where the metadata/raft database is storeddir "D:/influxdb/meta"...[data]# The directory where the TSM…...
【LeetCode - 每日一题】823. 带因子的二叉树 (2023.08.29)
823. 带因子的二叉树 题意 元素都大于1,元素不重复。计数满足要求的二叉树(每个非叶结点的值应等于它的两个子结点的值的乘积)的数量。元素可以重复使用。 代码 自上而下动态规划。 所有元素大于1,所以不会有 自己自己自己 的…...
flutter 上传图片并裁剪
1.首先在pubspec.yaml文件中新增依赖pub.dev image_picker: ^0.8.75 image_cropper: ^4.0.1 2.在Android的AndroidManifest.xml文件里面添加权限 <activityandroid:name"com.yalantis.ucrop.UCropActivity"android:screenOrientation"portrait"andro…...
一台服务器上部署 Redis 伪集群
哈喽大家好,我是咸鱼 今天这篇文章介绍如何在一台服务器(以 CentOS 7.9 为例)上通过 redis-trib.rb 工具搭建 Redis cluster (三主三从) redis-trib.rb 是一个基于 Ruby 编写的脚本,其功能涵盖了创建、管…...
ealtek高清晰音频管理器(realtek高清晰音频管理器怎么设置win10)
本文为大家介绍realtek高清晰音频管理器(realtek高清晰音频管理器怎么设置win10),下面和小编一起看看详细内容吧。 我们都使用电脑来听音乐、看电影或者进行其他操作,但是如果我们觉得电脑产生的音效不够立体,我们就会想要去Realtek来设置音…...
微信小程序 scroll-view 组件的 bindscroll 不触发不生效
使用微信小程序基础组件中的scroll-view,但是滑动的时候 bindscroll 一直不生效。 <view class"container log-list"><scroll-view scroll-y style"height:100%;white-space:nowrap;" scroll-into-view"{{toView}}" enable…...
datax 删除分区数据,再写入MySQL脚本
#! /bin/bashDATAX_HOME/opt/module/datax#1、判断参数是否传入 if [ $# -lt 1 ] thenecho "必须传入all/表名..."exit fi #2、判断日期是否传入 [ "$2" ] && datestr$2 || datestr$(date -d -1 day %F)#DataX导出路径不允许存在空文件,…...
hyperf 十四 国际化
一 安装 composer require hyperf/translation:v2.2.33 二 配置 1、设置语言文件 文件结构: /storage/languages/en/messages.php /storage/languages/zh_CH/messages.php // storage/languages/en/messages.php return [welcome > Welcome to our applicat…...
C语言_初识C语言指针
文章目录 前言一、指针 ... 一个内存单元多大比较合适?二、地址或者编号如何产生?三、指针变量的大小 前言 内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。 所以为了有效的使用内存,就把内存划分成一个个…...
EMQX启用双向SSL/TLS安全连接以及java连接
作为基于现代密码学公钥算法的安全协议,TLS/SSL 能在计算机通讯网络上保证传输安全,EMQX 内置对 TLS/SSL 的支持,包括支持单/双向认证、X.509 证书、负载均衡 SSL 等多种安全认证。你可以为 EMQX 支持的所有协议启用 SSL/TLS,也可…...
4399面试总结C/C++游戏开发
主要流程 首先询问了C/C知识点 然后询问操作系统,计算机组成,数据结构,计算机网络哪两门熟悉 涉及的相关问题 多态的概念 tcp,udp? tcp,udp区别 tcp可靠,udp不可靠 tcp这个链接的过程? 一个TCP连接必须要经过三次“…...
hashlib 模块学习
hashlib 是 Python 标准库中用于散列和摘要算法的模块。散列算法将输入数据转换为固定长度的散列值(也称为摘要),并且对于相同的输入始终生成相同的散列值。这对于存储密码、数字签名、数据完整性验证等领域非常有用。以下是对 hashlib 模块的…...
大模型开发05:PDF 翻译工具开发实战
大模型开发实战05:PDF 翻译工具开发实战 PDF-Translator 机器翻译是最广泛和基础的 NLP 任务 PDF-Translator PDF 翻译器是一个使用 AI 大模型技术将英文 PDF 书籍翻译成中文的工具。这个工具使用了大型语言模型 (LLMs),如 ChatGLM 和 OpenAI 的 GPT-3 以及 GPT-3.5 Turbo 来…...
LeetCode 43题:字符串相乘
题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 "2", num2 "3&…...
基于java Swing 和 mysql实现的飞机订票系统(源码+数据库+ppt+ER图+流程图+架构说明+论文+运行视频指导)
一、项目简介 本项目是一套基于java Swing 和 mysql实现的飞机订票系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过…...
BMAD 开发者的日常如果你正在用
BMAD 开发者的日常如果你正在用 BMAD 方法论做开发,这套流程一定很熟悉:/bmad-bmm-create-story 1.1 # 创建故事 /bmad-bmm-dev-story 1.1 # 开发实现 /bmad-bmm-qa-automate 1.1 # 运行测试 /bmad-bmm-code-review 1.1 # 代码审查 # 发现 …...
C#的[StackTraceHidden]:从堆栈跟踪中隐藏方法
在C#开发中,堆栈跟踪是调试和排查问题的关键工具,但有时某些方法会干扰核心逻辑的追踪。为此,C#引入了StackTraceHidden特性,允许开发者从堆栈中隐藏特定方法,使调试信息更清晰。本文将深入探讨这一特性的应用场景、实…...
智能预处理预览功能详解:Anything to RealCharacters 2.5D引擎稳定性保障机制
智能预处理预览功能详解:Anything to RealCharacters 2.5D引擎稳定性保障机制 1. 项目概述 Anything to RealCharacters 2.5D转真人引擎是一款专为RTX 4090显卡优化的图像转换系统,能够将卡通、二次元、2.5D风格的图像高质量转换为写实真人照片。该系统…...
Chrome DevTools MCP:让 AI 编码助手拥有“浏览器之眼“
1.1 背景:AI 编程的"盲区" 在 AI 辅助编程的时代,我们已经习惯了让 AI 帮我们生成代码、修复 Bug、甚至重构项目。但长期以来,AI 编码助手有一个根本性的局限——它们只能"写"代码,却看不到代码在浏览器中实…...
实时数据流处理实战:从滑动窗口算法到Docker部署
用 Python 造一个轻量级流处理引擎,顺便把 Git、Docker、CI/CD 全串起来 前言 你是否有过这样的需求:统计过去 5 秒内 API 的请求次数、监控传感器数据的突变、或者对直播间的弹幕进行限流?这些场景都离不开实时数据流处理。而流处理的核心&…...
从零开始搭建自己的POC库:GitHub爬取+本地管理全攻略
从零构建个人POC武器库:自动化采集与智能管理实战指南 在漏洞研究和渗透测试领域,拥有一个组织良好的POC(Proof of Concept)库就像战士拥有趁手的武器。本文将带你从零开始,通过自动化工具和系统化方法,打造…...
open_clip多模态模型实战指南:从技术原理到产业落地
open_clip多模态模型实战指南:从技术原理到产业落地 【免费下载链接】open_clip An open source implementation of CLIP. 项目地址: https://gitcode.com/GitHub_Trending/op/open_clip 核心价值:为什么选择open_clip? 在当今AI应用…...
74HC595驱动8位数码管实战:从查找表到动态扫描的完整流程
74HC595驱动8位数码管实战:从查找表到动态扫描的完整流程 在嵌入式系统开发中,数码管显示是最基础也最考验硬件理解能力的环节之一。记得我第一次尝试用74HC595驱动数码管时,被那个"看似简单却暗藏玄机"的动态扫描原理折磨了整整三…...
如何修复 n8n Postgres 节点中的“节点未设置任何凭据”错误:一篇真正能照着操作的排障博客
如果你在用 n8n 连 Postgres 的时候,突然看到一句让人有点懵的报错:Node has no credentials set 或者中文界面里类似:节点未设置任何凭据先别慌。这个报错看起来像系统在跟你打哑谜,但它的真实意思其实非常朴素: 这个…...
MoveCertificate终极指南:Android 7-15系统证书管理全解析
MoveCertificate终极指南:Android 7-15系统证书管理全解析 【免费下载链接】MoveCertificate 支持Android7-15移动证书,兼容magiskv20.4/kernelsu/APatch, Support Android7-15, compatible with magiskv20.4/kernelsu/APatch 项目地址: https://gitco…...
