文章目录
- 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: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>
实战案例
使用自动化插件release来管理maven项目的版本发布