首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Maven - 使用maven-release-plugin规范化版本发布

Maven - 使用maven-release-plugin规范化版本发布

作者头像
小小工匠
发布2023-09-01 18:12:20
发布2023-09-01 18:12:20
2.9K0
举报
文章被收录于专栏:小工匠聊架构小工匠聊架构

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。以下是一个示例的插件配置:

代码语言:javascript
复制
<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)

执行以下命令来准备发布,这将包括版本号的增加和标签的创建:

代码语言:javascript
复制
mvn release:prepare

插件将会提示你输入版本号、下一个开发版本号以及是否提交和推送这些变更。

提交阶段(Perform Phase)

在准备阶段完成后,执行以下命令来执行发布:

代码语言:javascript
复制
mvn release:perform

这将会构建、测试、打包你的项目,并将生成的发布包部署到 Maven 仓库。

结束阶段

在完成发布后,你可以执行以下命令来结束发布过程,并将开发版本号恢复:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<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

代码语言:javascript
复制
 ?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>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Maven Release plugin – Introduction
  • Maven Release plugin – Plugin Documentation
  • Maven Release plugin – Usage
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档