【maven】maven-release-plugin 使用 (git)

简介

很nb的插件。为什么?

一般开发,基于一个snapshot版本开发,开发完以后,发一个对应的release的包,然后再将代码版本更新为下一个snapshot版本。这些工作当然可以纯手工完成,但是可能比较痛苦,这里介绍的release插件就是干这个的。

使用

这里使用了github作为代码仓库,使用本地的一个nexus作为maven的私服。

1. 定义scm。scm是一款抽象了代码本版控制功能的maven官方插件,release插件正式通过该插件来与git或者svn等代码管理仓库交互,这里定义scm就是为了指定代码库的地址。下面是一个git的例子。

    <scm> 
      <developerConnection>scm:git:https://github.com/xxx/xxx</developerConnection>
    </scm>

一般有三个属性,对于开发来说,只定义这一个就行。

 

2. 插件配置;

例子:


        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.5.3</version>
            <configuration>
                <autoVersionSubmodules>true</autoVersionSubmodules>
            </configuration>
        </plugin>

这里作为例子配置这些就够了。有一个常用的配置:

<preparationGoals>clean verify</preparationGoals>

就是release的目标prepare需要执行哪些目标,默认就是上面的clean和verify。如果需要自定义可以特殊配置。

 

3. 仓库地址

这个就不贴了。

 

关于插件目标,主要是prepare和perform两个目标。

prepare:概括来说,就是perform之前需要执行的准备操作,主要是代码版本修改和提交。

具体来说呢?主要有以下几个:

1)检测是否有未提交的代码。

2)检测是否有snapshot依赖。

3)修改工程的版本号为release版本(提示输入)。

4)为当前代码打上一个git的tag(提示输入),提交代码至远程仓库。

5)修改pom为下一个snapshot版本(输入提示),提交至远程仓库。

注意,这里一共提交了两次代码,第一次是release版本,第二次是snapshot版本。

 

perform:发包。具体来说,perform会从远程代码库拉下刚才第一次提交的release版本的代码。然后内部再起一个maven build过程,执行一次deploy,将release包发至nexus仓库。那怎么找到release版本呢?下面会介绍。

 

下面看一个例子:

执行prepare之前一般需要执行clean,做一些清理工作。

执行之前,确保满足prepare的检查条件。

 mvn release:clean release:prepare

看下具体过程:

[INFO] Verifying that there are no local modifications...
 

[INFO] Checking dependencies and plugins for snapshots ...
 

What is the release version for "testMaven"? (com.liyao:testMaven) 2.0: : 
What is SCM release tag or label for "testMaven"? (com.liyao:testMaven) testMaven-2.0: : 
What is the new development version for "testMaven"? (com.liyao:testMaven) 2.1-SNAPSHOT: : 
 

[INFO] Not generating release POMs
[INFO] Executing goals 'clean verify'...
 

[INFO] Executing: /bin/sh -c cd /Users/miracle/test/mvn/PPranet/testMaven && git tag -F /var/folders/rl/tf7q0v610mx81mmrqzqfps0m0000gn/T/maven-scm-343870307.commit testMaven-2.0
[INFO] Working directory: /Users/miracle/test/mvn/PPranet/testMaven
[INFO] Executing: /bin/sh -c cd /Users/miracle/test/mvn/PPranet/testMaven && git push https://github.com/miracle2138/java.git refs/tags/liyao03

 

[INFO] Not removing release POMs
 

[INFO] Executing: /bin/sh -c cd /Users/miracle/test/mvn/PPranet/testMaven && git push https://github.com/miracle2138/java.git refs/heads/master:refs/heads/master
[INFO] Working directory: /Users/miracle/test/mvn/PPranet/testMaven
[INFO] Release preparation complete.
 

从这些步骤可以看到prepare做了哪些事。

执行完后,生成了一个release.properties文件。内容如下:

#release configuration
#Fri May 24 22:18:48 CST 2019
project.scm.com.liyao\:testMaven.developerConnection=scm\:git\:https\://github.com/xxx/java.git
scm.tagNameFormat=@{project.artifactId}-@{project.version}
scm.tag=testMaven-2.0
project.dev.com.liyao\:testMaven=2.1-SNAPSHOT
pushChanges=true
scm.url=scm\:git\:https\://github.com/miracle2138/java.git
preparationGoals=clean verify
remoteTagging=true
projectVersionPolicyId=default
scm.commentPrefix=[maven-release-plugin] 
project.scm.com.liyao\:testMaven.tag=HEAD
project.rel.com.liyao\:testMaven=2.0
exec.snapshotReleasePluginAllowed=false
exec.additionalArguments=-P developemnt
completedPhase=end-release

这个文件是为后面的perform发包准备的,里面指定了perform该如何从远程仓库拉到release的代码。prepare推代码时要求输入一个Git的tag,tag就被记录在这个文件里,perform会读取这个文件里的tag,利用这个tag来拉取release代码。发完包就会删除。

下面执行perform:

 mvn release:perform  

这里只看一下拉取代码的过程:

[INFO] Executing: /bin/sh -c cd /Users/miracle/test/mvn/PPranet/testMaven/target && git clone --branch testMaven-2.0 https://github.com/miracle2138/java.git /Users/miracle/test/mvn/PPranet/testMaven/target/checkout
[INFO] Working directory: /Users/miracle/test/mvn/PPranet/testMaven/target
[INFO] Executing: /bin/sh -c cd /var/folders/rl/tf7q0v610mx81mmrqzqfps0m0000gn/T/ && git ls-remote https://github.com/miracle2138/java.git
[INFO] Working directory: /var/folders/rl/tf7q0v610mx81mmrqzqfps0m0000gn/T
[INFO] Executing: /bin/sh -c cd /Users/miracle/test/mvn/PPranet/testMaven/target/checkout && git fetch https://github.com/miracle2138/java.git
[INFO] Working directory: /Users/miracle/test/mvn/PPranet/testMaven/target/checkout
[INFO] Executing: /bin/sh -c cd /Users/miracle/test/mvn/PPranet/testMaven/target/checkout && git checkout testMaven-2.0
[INFO] Working directory: /Users/miracle/test/mvn/PPranet/testMaven/target/checkout
[INFO] Executing: /bin/sh -c cd /Users/miracle/test/mvn/PPranet/testMaven/target/checkout && git ls-files
[INFO] Working directory: /Users/miracle/test/mvn/PPranet/testMaven/target/checkout
[INFO] Invoking perform goals in directory /Users/miracle/test/mvn/PPranet/testMaven/target/checkout
确实使用了之前的tag。

后面就是一个完整的maven的deploy的过程。

发包结束。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值