`
lvjun106
  • 浏览: 438050 次
  • 性别: Icon_minigender_1
  • 来自: 芜湖
社区版块
存档分类
最新评论

maven版本管理

阅读更多

现在所说的maven版本不同于SVN的版本控制哦!!!

之前我们说过Maven的版本分为快照和稳定版本,快照版本使用在开发的过程中,方便于团队内部交流学习。而所说的稳定版本,理想状态下是项目到了某个比较稳定的状态,这个稳定包含了源代码和构建都要稳定。

一、如何衡量项目的稳定状态呢?

1. 所有的自动化测试应当全部通过

2. 项目没有配置任何快照版本的依赖

3. 项目没有配置任何快照版本的插件

4. 项目所包含的代码都已经全部提交到了版本控制系统中

5.我们应当再一次执行Maven构建,以确保项目的状态是OK的

6. 我们将这一次变更提交到版本控制的主干中,并打上标签

只有满足了上述6个条件, 我们就可以将这一个快照版本更新至发布版本

 

二、在开发的过程中,版本号要如何进行变更呢?Maven是否有潜在的约定?

 

我们在开发的过程中,下载jar包的时候经常会发现某个jar类似这样:1.2.3-beat-4.jar

多么复杂的一个名称。。。下面来解释一下,这里每个数字的含义:

“ 1 ” :  表示该版本的第一个重大版本

“ 2 ” :  表示这是基于重大版本的第二个次要版本

“ 3 ” :  表示该次要版本的第三个增量

" beat-4" : 表示该增量的一个里程碑

用一个图来描述:

< 主版本 >  ------   < 次版本 > ------ < 增量版本 > ------ < 里程碑版本 >

主版本:表示了项目的重大架构变更  struts1 --  struts2

次版本:表示较大范围的功能增加和变化  Nexus1.5 ----   Nexus1.4

增量版本:一般表示重大Bug修复  

里程碑版本:指某一个版本的里程碑   *.*-alpha-1  *.*-beat-1

看起来有点麻烦啊, 但是在一般来说,我们只会声明主版本和次版本,增量版本和里程碑版本就不一定了。

注:maven中约定的版本次序

对于主版本、次版本、增量版本来说他们的比较是基于数字的,因此:1.5>1.4>1.3>1.2.11>1.2.8

对于里程碑版本来说,比较是基于字符串的,因此:1.5>1.4>1.3>1.2.3>1.2.11

 

三、主干、分支、标签

上面的笔记中提到了主干和标签,到底如何理解主干、分支、标签呢?

主干: 项目开发代码的主体,是从项目开始到当前都处于活动的状态,从这里可以获得项目最新的源代码和几乎所有的变更历史

分支: 从主干的某个点分离出来的代码拷贝,通常可以在不影响主干的前提下,在这里进行重大的bug修复或者实验性质的开发,如果达到了预期的目的,通常将这里的变更合并到主干中去。

标签: 用来标识主干或者分支的某个点的状态,以代表项目的某个稳定状态,也就是通常说的发布状态

这三个元素,可以清晰的描述出项目的版本管理,而且也已经成了一个默认的行业标准。

 

四、自动化版本发布

用久了手动版本发布之后,我们会想到能否进行自动化的发布版本,答案是肯定的,这将引入一个新的插件:Maven Release Plugin

通过一些必要的配置,就可以完成版本发布

Maven Release Plugin 插件简介:

该插件主要有三个目标:release: prepare,  release: rollback,  release: perform (什么是插件目标),在介绍分支自动化的时候还会引入branch目标

①release:prepare   准备版本发布,依次执行下列操作

1. 检查项目是否有未提交的代码

2. 检查项目是否有快照版本依赖

3. 根据用户的输入将快照版本升级为发布版

4. 将POM中的SCM信息更新为标签地址

5. 基于修改后的POM执行maven构建

6. 提交POM变更

7. 基于用户输入为代码打标签

8. 将代码从发布版升级为新的快照版

9.提交POM变更

release: rollback

回退release: prepare所执行的操作。将POM回退至release:prepare之前的状态,并提交。

注:该步骤不会删除release:prepare生成的标签,需要用户手动删除

release: perform

执行版本发布

签出release:prepare生成的标签中的源代码,并在此基础上执行mvn deploy命令打包并部署构件至仓库

 

注:要为项目发布版本,首先需要为其添加正确的版本控制系统信息(这是因为Maven Release Plugin需要知道版本控制系统的主干、标签等地址后才能执行相关操作)

 

②分支的自动化创建

先看一下Maven Release Plugin 的branch目标能帮助我们做哪些事情

1. 检查本地有无未提交的代码

2. 将分支更改POM的版本,如:1.1.0-SNAPSHOT改成1.1.1-SNAPSHOT

3. 将POM中的SCM信息更新为分支地址

4. 提交以上更改

5. 将主干代码复制到分支中

6. 修改本地代码使其回退到分支前的版本(用户可以指定新的版本)

7. 提交本地更改

注:此时也必须正确的配置SCM信息

 

五、代码安全

代码安全是我们比较关心的一个问题, 比如说,当我们从中央仓库下载第三方构件的时候,我们可能要去验证这些文件的合法性,或者当我们发布项目后,使用我们项目的人也要验证

引入一个新的插件:Maven GPG Plugin 自动的完成签名

在使用Maven GPG Plugin之前,首先需要确定GPG是可用的,然后再POM中配置插件即可

pom.xml

 

[html] view plain copy
 
  1. <plugin>  
  2.     <groupId>org.apache.maven.plugins</groupId>  
  3.     <artifactId>maven-gpg-plugin</artifactId>  
  4.     <version>1.0</version>  
  5.     <executions>  
  6.          <execution>  
  7.         <id>sign-artifacts</id>  
  8.         <phase>verify</phase>  
  9.         <goals>  
  10.               <goal>sign</goal>  
  11.         </goals>  
  12.          </execution>  
  13.     </executions>  
  14. </plugin>  


然后使用一般的Maven命令签名并发布项目构件

 

 

[html] view plain copy
 
  1. $mvn clean deploy -Dgpg.passphrase=****  


注:

 

1. 如果不提供 -Dgpg.passphrase参数,运行时就会要求输入密码

分享到:
评论

相关推荐

    Maven版本管理

    Maven,作为Java世界中的一个强大项目管理和构建工具,它的核心功能之一就是版本管理。Maven通过中央仓库和依赖管理机制,使得开发者能够高效地管理项目中所依赖的各种库的版本,从而简化了项目的构建过程。下面将...

    Spring-Framework-5.2.x Maven版本

    Spring Framework 5.2.x提供Maven版本,意味着开发者可以使用Maven的`pom.xml`文件来声明Spring框架和其他相关库的依赖,简化项目的构建过程。这包括了自动下载所需库、解决依赖冲突以及执行构建生命周期中的各种...

    maven历史版本下载

    2. **插件管理**:Maven的插件管理系统得到了加强,允许更灵活地配置和管理插件版本,减少了构建冲突的可能性。 3. **依赖管理**:3.5.2增强了依赖解析机制,能更准确地处理传递性依赖,避免了版本冲突。 4. **...

    Maven兼容jdk1.7版本

    例如,较新的Maven版本可能需要更高版本的JDK才能运行。然而,"Maven 3.0.5"特别强调了与JDK 1.7的兼容性,这意味着使用此版本的Maven可以顺利处理基于Java 7的项目,无需升级JDK,这对于那些无法或不想升级JDK的...

    jpress非maven版本

    本篇文章将详细探讨JPress的非Maven版本,帮助用户理解和掌握在不使用Maven构建工具的情况下如何管理和运行JPress项目。 首先,我们来理解一下“非Maven版本”的含义。在软件开发领域,Maven是Apache提供的一款项目...

    maven各版本

    在实际开发中,根据项目需求和团队偏好选择合适的Maven版本至关重要。 总结来说,Maven 3.0.4、3.2.5和3.3.9分别代表了Maven在不同时期的发展和进步。无论是在性能优化、插件管理还是依赖解析方面,这些版本都有其...

    Maven仓库管理-Nexus

    Maven 仓库的初衷是为了解决版本管理的问题,通过 Group Id, Artifact Id, version 来管理 jar 包,实现了依赖管理的方便性。 Maven 仓库可以分为两个概念:本地仓库和远程仓库。本地仓库是远程仓库的一个缓冲和...

    maven 3.3.9版本

    Maven是一个项目管理和综合工具,它通过使用一种标准化的构建过程,使得Java项目的构建、依赖管理和文档生成变得更加简单。在Maven 3.3.9中,开发者可以享受到一系列的改进和修复,这些特性增强了开发效率并优化了...

    Maven3.5~3.6.3各版本下载

    Maven版本下载指南 Maven是一款基于Java的项目管理和构建工具,由 Apache Software Foundation 开发和维护。Maven的主要功能是帮助开发者快速构建、测试和部署项目。在实际项目开发中,Maven发挥着至关重要的作用。...

    最新Maven版本:apache-maven-3.6.0

    Apache Maven 是一个强大的Java项目管理工具,它极大地简化了构建、依赖管理和项目文档的生成过程。Maven 3.6.0是该工具的一个稳定版本,提供了多项改进和新特性,旨在提高开发效率和增强项目的可维护性。 Maven的...

    maven java 管理框架

    1. **项目管理**:Maven通过唯一的坐标系统(包括组ID、项目ID和版本号)来识别项目,这使得跨项目依赖的管理变得简单且一致。项目间的依赖关系可以通过这些坐标轻松声明,从而确保了依赖项的一致性和可追踪性。 2....

    maven3.0版本下载

    Maven是Java世界中的一款项目管理和综合工具,它通过提供一套标准化的构建过程,极大地简化了项目的构建、依赖管理和部署流程。Maven3.0版本是一个重要的里程碑,它引入了许多改进和新特性,使得开发人员在处理大型...

    maven项目管理工具

    2. **版本管理**: 使用`&lt;version&gt;`标签管理项目版本,遵循语义化版本规则。 3. **使用版本范围(Version Ranges)**: 当需要允许依赖更新时,可以使用版本范围,但需谨慎,避免引发不兼容问题。 4. **排除不必要的...

    最好用的maven3

    "最好用的maven3"这一标题表明了Maven 3版本因其高效和易用性而备受推崇。本文将深入探讨Maven 3的核心特性、安装配置、以及如何利用它进行项目的构建与管理。 ### 1. Maven 3 的核心特性 - **项目对象模型 ...

    Maven项目管理软件

    ** Maven项目管理软件详解 ** Maven是一款强大的Java项目管理工具,由Apache Software Foundation开发并...通过Apache官网下载的Maven版本,如`apache-maven-3.2.2`,包含了完整的Maven环境,开发者可以直接安装使用。

    maven版本:apache-maven-3.5.4-bin

    依赖管理则允许开发者声明项目所需的库和其他依赖,Maven会自动下载并管理这些依赖,避免版本冲突问题。构建生命周期则定义了一系列预定义的构建阶段,如编译、测试、打包、部署等。 Maven 3.5.4版本是在Maven 3.x...

    非maven版本jpress

    【非Maven版本JPress】是一个基于Java开发的博客系统,它原本是使用Maven构建的,但由于项目的规模较小,开发者认为使用Maven这样的复杂构建工具并不划算,因此将其转换成了非Maven版本。这个决定可能基于减少依赖、...

    maven3.x全版本.zip

    3. **Maven 3.2.5**: 在这一版本中,Maven 引入了更好的错误报告和调试信息,同时加强了对依赖范围的管理,以及对 Maven 集成环境的支持,例如 IDE 和构建服务器。 4. **Maven 3.3.9**: Maven 3.3.9 是一个重要的...

    Intellij IDEA 与maven 版本不符

    然而,有时用户可能会遇到“IntelliJ IDEA与Maven版本不符”的问题,导致无法正常导入Maven项目。这个问题通常表现为在尝试导入Maven项目时,IDE返回一个错误提示,如:“Unable to import maven project: See logs ...

    maven v3.5.0版本

    Maven 3.5.0是Apache Maven项目发布的一个重要版本,它是一个流行的Java构建工具,广泛用于管理项目的构建、报告和依赖关系。这个版本带来了许多改进和优化,旨在提高开发效率和增强Maven的功能性。 1. **性能提升*...

Global site tag (gtag.js) - Google Analytics