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 提供了以下主要步骤和功能:

  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:执行发布流程

  1. 准备阶段(Prepare Phase)

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

    mvn release:prepare
    

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

  2. 提交阶段(Perform Phase)

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

    mvn release:perform
    

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

  3. 结束阶段

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

    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项目的版本发布

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/95682.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

hadoop学习:mapreduce入门案例二:统计学生成绩

这里相较于 wordcount&#xff0c;新的知识点在于学生实体类的编写以及使用 数据信息&#xff1a; 1. Student 实体类 import org.apache.hadoop.io.WritableComparable;import java.io.DataInput; import java.io.DataOutput; import java.io.IOException;public class Stude…

java八股文面试[多线程]——合适的线程数是多少

知识来源&#xff1a; 【并发与线程】 合适的线程数量是多少&#xff1f;CPU 核心数和线程数的关系&#xff1f;_哔哩哔哩_bilibili 【2023年面试】程序开多少线程合适_哔哩哔哩_bilibili

LeetCode 44题:通配符匹配

题目 给你一个输入字符串 (s) 和一个字符模式 (p) &#xff0c;请你实现一个支持 ? 和 * 匹配规则的通配符匹配&#xff1a; ? 可以匹配任何单个字符。* 可以匹配任意字符序列&#xff08;包括空字符序列&#xff09;。 判定匹配成功的充要条件是&#xff1a;字符模式必须…

Python实现自动关键词提取

随着互联网的发展&#xff0c;越来越多的人喜欢在网络上阅读小说。本文将通过详细示例&#xff0c;向您介绍如何使用Python编写爬虫程序来获取网络小说&#xff0c;并利用自然语言处理技术实现自动文摘和关键词提取功能。 1. 网络小说数据抓取 首先&#xff0c;请确保已安装必…

Kotlin协程简述与上下文和调度器(Dispatchers )

协程概述 子程序或者称为函数&#xff0c;在所有的语言中都是层级调用&#xff0c;如&#xff1a;A调用B&#xff0c;B在执行过程中又调用了C&#xff0c;C执行完毕返回&#xff0c;B执行完毕返回&#xff0c;最后是A执行完毕。所以子程序是 通过栈来实现的&#xff0c;一个线…

使用安全复制命令scp在Windows系统和Linux系统之间相互传输文件

现在已经有很多远程控制服务器的第三方软件平台&#xff0c;比如FinalShell&#xff0c;MobaXterm等&#xff0c;半可视化界面&#xff0c;使用起来非常方便和友好&#xff0c;两个系统之间传输文件直接拖就行&#xff0c;当然也可以使用命令方式在两个系统之间相互传递。 目录…

git 基础

1.下载安装Git&#xff08;略&#xff09; 2.打开git bash窗口 3.查看版本号、设置用户名和邮箱 用户名和邮箱可以随意起&#xff0c;与GitHub的账号邮箱没有关系 4.初始化git 在D盘中新建gitspace文件夹&#xff0c;并在该目录下打开git bash窗口 git init 初始化完成后会…

基于深度学习的机器视觉表计识别

01 引言 针对仪表自动读数问题&#xff0c;新型数字式仪表的读数比较方便&#xff0c;现阶段已经有非常多成熟的方案落地&#xff0c;而针对传统指针式仪表自动读数的现有方案还不够成熟&#xff0c;存在识别不精确、易受环境干扰等问题&#xff0c;是亟待研究和攻克的难题。我…

ICS PA1

ICS PA1 init.shmake 编译加速ISA计算机是个状态机程序是个状态机准备第一个客户程序parse_argsinit_randinit_loginit_meminit_isa load_img剩余的初始化工作运行第一个客户程序调试&#xff1a;零断点TUI 基础设施单步执行打印寄存器状态扫描内存 表达式求值词法分析递归求值…

Vue.js2+Cesium1.103.0 十一、Three.js 炸裂效果

Vue.js2Cesium1.103.0 十一、Three.js 炸裂效果 Demo ThreeModelBoom.vue <template><div:id"id"class"three_container"/> </template><script> /* eslint-disable eqeqeq */ /* eslint-disable no-unused-vars */ /* eslint-d…

20 MySQL(下)

文章目录 视图视图是什么定义视图查看视图删除视图视图的作用 事务事务的使用 索引查询索引创建索引删除索引聚集索引和非聚集索引影响 账户管理&#xff08;了解非DBA&#xff09;授予权限 与 账户的相关操作 MySQL的主从配置 视图 视图是什么 通俗的讲&#xff0c;视图就是…

(Windows )本地连接远程服务器(Linux),免密码登录设置

在使用VScode连接远程服务器时&#xff0c;每次打开都要输入密码&#xff0c;以及使用ssh登录或其它方法登录&#xff0c;都要本地输入密码&#xff0c;这大大降低了使用感受&#xff0c;下面总结了免密码登录的方法&#xff0c;用起来巴适得很&#xff0c;起飞。 目录 PowerSh…

数据仓库总结

1.为什么要做数仓建模 数据仓库建模的目标是通过建模的方法更好的组织、存储数据&#xff0c;以便在性能、成本、效率和数据质量之间找到最佳平衡点。 当有了适合业务和基础数据存储环境的模型&#xff08;良好的数据模型&#xff09;&#xff0c;那么大数据就能获得以下好处&…

深入了解Nginx:高性能的开源Web服务器与反向代理

一、Nginx是什么 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;也可以作为负载均衡器和HTTP缓存服务器使用。它采用事件驱动、异步非阻塞的处理方式&#xff0c;能够处理大量并发连接和高流量负载&#xff…

supervisorctl(-jar)启动配置设置NACOS不同命名空间

背景 由于需要在上海服务器上面配置B测试环境&#xff0c;原本上面已有A测试环境&#xff0c;固需要将两套权限系统分开 可以使用不同的命名空间来隔离启动服务 注&#xff1a;本文章均不涉及公司机密 1、新建命名空间 命名空间默认会有一个public&#xff0c;并且不能删除&a…

Java 中数据结构HashMap的用法

Java HashMap HashMap 是一个散列表&#xff0c;它存储的内容是键值对(key-value)映射。 HashMap 实现了 Map 接口&#xff0c;根据键的 HashCode 值存储数据&#xff0c;具有很快的访问速度&#xff0c;最多允许一条记录的键为 null&#xff0c;不支持线程同步。 HashMap 是…

自然语言处理2-NLP

目录 自然语言处理2-NLP 如何把词转换为向量 如何让向量具有语义信息 在CBOW中 在Skip-gram中 skip-gram比CBOW效果更好 CBOW和Skip-gram的算法实现 Skip-gram的理想实现 Skip-gram的实际实现 自然语言处理2-NLP 在自然语言处理任务中&#xff0c;词向量&#xff08;…

分布式集群框架——有关zookeeper的面试考点

3.掌握Zookeeper的概念 当涉及到大规模分布式系统的协调和管理时&#xff0c;Zookeeper是一个非常重要的工具。 1. 分布式协调服务&#xff1a;Zookeeper是一个分布式协调服务&#xff0c;它提供了一个高可用和高性能的环境&#xff0c;用于协调和同步分布式系统中的各个节点…

js深拷贝三种方法

使用递归函数实现深拷贝 const obj {name: zzz,age: 18,hobby: [篮球, 足球],family: {baby: baby}} // 深拷贝 数组 对象 一定要先筛数组再筛对象,因为万物皆对象function deepcopy(newObj, oldObj) {for (const k in oldObj) {// 判断值是否属于array类if (oldObj[k] i…

[Android AIDL] --- AIDL工程搭建

0 AIDL概念 AIDL&#xff08;Android Interface Definition Language&#xff09;是一种 IDL 语言&#xff0c;用于生成可以在 Android 设备上两个进程之间进行进程间通信&#xff08;IPC&#xff09;的代码。 通过 AIDL&#xff0c;可以在一个进程中获取另一个进程的数据和调…