Maven Release plugin – Introduction
Maven Release Plugin(Maven 发布插件)是一个用于帮助在Maven项目中执行版本发布流程的插件。它的主要功能是简化项目版本的发布和管理,确保版本号的正确性,并自动处理与版本发布相关的任务。
通常情况下,软件项目的版本管理是一个复杂的过程,需要考虑版本号的增加、代码库的分支、标签的创建、文档的更新等一系列任务。Maven Release Plugin 旨在通过自动化这些任务,减少人为错误,并提供一个一致性的发布过程。
Maven Release Plugin 提供了以下主要步骤和功能:
1. 准备阶段(Prepare Phase):
检查代码库的状态,确保没有未提交的修改。
自动增加项目版本号,比如从 1.0.0-SNAPSHOT 到 1.0.0。
创建一个用于发布的标签,以便后续的版本控制和追踪。
2.提交阶段(Perform Phase):
将已更新的版本号和标签提交到版本控制系统(例如 Git、Subversion)。
将项目构建、测试、打包,并生成发布包。
部署生成的发布包到 Maven 仓库,使其可供其他项目使用。
3. 结束阶段:
恢复开发版本号(例如从 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 • 1
- 插件将会提示你输入版本号、下一个开发版本号以及是否提交和推送这些变更。
- 提交阶段(Perform Phase):
在准备阶段完成后,执行以下命令来执行发布:
mvn release:perform • 1
- 这将会构建、测试、打包你的项目,并将生成的发布包部署到 Maven 仓库。
- 结束阶段:
在完成发布后,你可以执行以下命令来结束发布过程,并将开发版本号恢复:
mvn release:clean • 1
- 这将撤销之前所做的版本号和标签变更。
注意事项:
确保在执行发布过程前,所有未提交的修改都已提交或保存,以避免数据丢失。
插件的行为受项目的结构和构建流程影响,具体的配置和步骤可能因项目而异。
如果你使用的是版本控制系统(如 Git),请确保你具有适当的权限来创建标签和推送更改。
请注意,这只是一个简单的示例,实际使用中可能需要根据项目的需求进行更详细的配置。建议在使用 Maven Release Plugin 前阅读相关文档,了解各个配置参数的含义以及可能遇到的问题和解决方法。
该插件用于使用Maven发布项目,节省大量重复的手动工作。项目发布分为两个步骤:准备和执行。
https://maven.apache.org/maven-release/maven-release-plugin/
release:clean Clean up after a release preparation.
release:prepare Prepare for a release in SCM.
release:prepare-with-pom Prepare for a release in SCM, and generate release POMs that record the fully resolved projects used.
release:rollback Rollback a previous release.
release:perform Perform a release from SCM.
release:stage Perform a release from SCM into a staging folder/repository.
release:branch Create a branch of the current project with all versions updated.
release:update-versions Update 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>








