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

news2024/10/7 2:22:58

文章目录

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BFS4专题 迷宫最短路径(输出路径)

题目&#xff1a;样例&#xff1a; 输入 3 3 0 1 0 0 0 0 0 1 0 输出 1 1 2 1 2 2 2 3 3 3 思路&#xff1a; 这里刚开始看的时候会可能有点复杂了&#xff0c;因为是递归。 但是只要理解了含义&#xff0c;脑袋里模拟一下还是可以理解的。首先还是 之前那样 BFS 常规搜索 …

深圳寄墨西哥专线国际物流详解

随着全球贸易的不断发展&#xff0c;国际物流服务的需求也越来越大。深圳这座中国的特区城市&#xff0c;不仅是全球电子产品供应链的重要节点&#xff0c;也是国际物流服务的中心之一。对于那些需要将物品从深圳邮寄到墨西哥的人来说&#xff0c;深圳邮寄到墨西哥专线的国际物…

【JavaEE进阶】拦截器与统一功能处理

文章目录 一. 用户登录权限效验1. 最初用户登录验证2. Spring AOP 用户统一登录的验证3. Spring拦截器3.1 自定义拦截器3.2 将自定义拦截器设置到当前的项目中 4. 拦截器实现的原理 二. 统一的异常处理三. 统一数据返回格式1. 统一数据返回格式的优点2. 统一数据返回格式的实现…

vim编辑器的基本使用复习

之前写过vim的使用&#xff0c;还不是太熟悉&#xff1b;复习一下&#xff0c; 在MSYS2下使用vim&#xff1b;先安装&#xff1b;单安装vim的话非常快&#xff1b; 输入 vim hello.c&#xff0c;进入文件hello.c的编辑&#xff1b;刚进入时是在vim的命令模式&#xff0c;不能输…

计算机视觉主要任务

计算机视觉&#xff1a;使用计算机及相关设备对生物视觉的一种模拟。 主要包含6大任务&#xff0c;图像分类&#xff0c;目标检测&#xff0c;目标跟踪&#xff0c;语义分割&#xff0c;实例分割&#xff0c;影像重构。 图像分类&#xff1a;根据图像信息中所反映的不同特征&am…

[Android 四大组件] --- Service

1 service是什么 Service是Android系统中的四大组件之一&#xff0c;它是一种长生命周期的&#xff0c;没有可视化界面&#xff0c;运行于后台的一种服务程序。 2 service分类 3 service启动方式 3.1 startService显示启动 // AndroidManifest.xml<?xml version"1…

2023第七届蓝帽杯 初赛 web LovePHP

LovePHP 直接给了源码。 network查看到&#xff0c;PHP版本是7.4.33 题目要求我们GET一个my_secret.flag参数&#xff0c;根据PHP字符串解析特性&#xff0c;PHP需要将所有参数转换为有效的变量名&#xff0c;因此在解析查询字符串时&#xff0c;它会做两件事&#xff1a; 删…

各个微服务模块之间互相依赖调用的问题

首先是模块之间不能够循环引用&#xff0c;否则会报循环依赖引入的错误。 没有了模块之间的相互依赖&#xff0c;在项目中这两个模块是相互调用的&#xff0c;分别各自定义相应的Feign接口&#xff0c;如下&#xff1a; 最开始写的运行报错的代码如下&#xff1a; FeignCli…

概念解析 | 量子机器学习:将量子力学与人工智能的奇妙融合

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:量子机器学习。 量子机器学习:将量子力学与人工智能的奇妙融合 量子增强机器学习:量子经典混合卷积神经网络 量子机器学习是量子计算和机器学习的结合,它利用量子力学的特…

Python小知识 - 一个简单的Python爬虫实例

一个简单的Python爬虫实例 这是一个简单的Python爬虫实例&#xff0c;我们将使用urllib库来下载一个网页并解析它。 首先&#xff0c;我们需要安装urllib库&#xff1a; pip install urllib接下来&#xff0c;我们来看看如何使用urllib库来下载一个网页&#xff1a; import url…

Mybatis学习笔记(三)——Mybatis的配置(Mybatis-config.xml)

Mybatis学习笔记&#xff08;三&#xff09;——Mybatis的配置&#xff08;Mybatis-config.xml&#xff09; 传送门&#xff1a;Mybatis中文网——配置 Mybatis配置文档的顶层结构&#xff1a; configuration&#xff08;配置&#xff09; properties&#xff08;属性&#…

软考A计划-网络工程师-复习背熟-网络管理和计算机基础知识

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

基于SpringBoot+Vue的旅游系统

摘 要 随着旅游业的发展&#xff0c;越来越多的人选择旅游作为自己的出行方式。在旅游规划过程中&#xff0c;旅游景点选择是至关重要的环节。本文提出了一种基于协同过滤推荐算法的旅游平台系统。该系统采用前后端分离的设计&#xff0c;主要使用了SpringBoot、Vue等技术&…

springmvc没有绿标,怎么配置tomcat插件运行?

一、添加插件后&#xff0c;刷新&#xff0c;自动从maven仓库下载tomcat插件 二、写好项目后&#xff0c;添加tomcat配置 三、即可点击绿标运行

2024王道408数据结构P144 T17

2024王道408数据结构P144 T17 思考过程 先看题目&#xff0c;让我们判断两棵二叉树是否相似&#xff0c;相似指的是以下三个方面&#xff1a; T1和T2都是空的二叉树或T1和T2都只有一个结点T1的左子树和T2的左子树是相似的&#xff0c;且T1的右子树和T2的右子树是相似的。 题…

61.linux系统上c程序的编译与调试

目录 1.检查GCC是否已经安装&#xff1a;​编辑 2.使用包管理器来安装gcc: 3.c程序执行需要经过四个步骤 4.make和makefile 5.gdb调试 基础调试命令 一些示例 对于在Linux系统上编译和调试C程序&#xff0c;首先&#xff0c;需要确保已经安装了合适的编译器。在大多数…

均匀性校准积分球光源

随着LED半导体照明技术的发展和LED半导体照明产业的不断壮大&#xff0c;合理有效的LED 灯具或芯片的光度、色度检测方法是支撑半导体照明产业发展的重要技术基础&#xff0c;同时也 为积分球内部照明产品的提升提供了重要的技术保障。 在物理世界中&#xff0c;存在着各种各样…

elementui tree 层级过多时,高亮状态无法选满整行

问题&#xff1a; 如上图所示&#xff0c;官方的tree组件&#xff0c;在层级很多时 elementui -tree 的高亮状态并没有选中整行。 &#xff08;衍生库 vue-easy-tree 也会出现此问题&#xff09; 原因&#xff1a; &#xff08;没有查看源码&#xff0c;只是根据dom简单定位…

“亚马逊云科技创业加速器”首期聚焦AI,促进入营企业业务发展

生成式AI技术飞速发展&#xff0c;颠覆着人们的生活&#xff0c;正在掀起新一轮的科技革命。在生成式AI的浪潮中&#xff0c;亚马逊云科技旨在为中国的优秀初创企业提供全方位支持&#xff0c;助其抢占先机。 在6月底举办的亚马逊云科技中国峰会上&#xff0c;亚马逊云科技联合…

SingleCellExperiment and SummarizedExperiment

这里的两个是不一样的 http://home.cc.umanitoba.ca/~psgendb/birchhomedir/R/x86_64-redhat-linux-gnu-library/3.4/SummarizedExperiment/html/SummarizedExperiment-class.html创建SummarizedExperiment nrows <- 200; ncols <- 6 counts <- matrix(runif(nrows …