Maven release插件打tag,發佈release版到nexus

1、背景

 SNAPSHOT爲快照版,不穩定,開發時使用的版本,當測試穩定後,可發佈RELEASE版java

下面介紹下,本次實驗環境:web

Maven 3.3.1apache

nexus 2.11.1app

Subversion 1.8.xmaven

注意:SVN Connector與Subversion(主要是由於BIN目錄包含了一些SVN客戶端的命令程序)版本需一致svn

Eclipse Mar(目前發現SVN的圖標,好比未同步圖標等,不知道爲何不能顯示,這個先無論)測試

 

2、步驟

2.1 新建Maven項目

 

     怎麼建就不過多說明了,這個相信你們都已經知道了ui

 

2.2 右鍵 Team->Share Project

 commit全部文件url

 

2.3 編輯項目pom.xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.jaychang</groupId> <artifactId>testapp</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>testapp</name> <url>http://maven.apache.org</url> <distributionManagement> <repository> <id>nexus-releases</id> <name>Internal Release Repository</name>
			<url>http://127.0.0.1:8081/nexus/content/repositories/releases/</url>
		</repository>
		<snapshotRepository>
			<id>nexus-snapshots</id>
			<name>Internal Snapshot Repository</name>
			<url>http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>
		</snapshotRepository>
	</distributionManagement>

	<scm>
		<connection>scm:svn:svn://127.0.0.1/javadev/testapp/trunk/</connection>
		<developerConnection>scm:svn:svn://127.0.0.1/javadev/testapp/trunk/</developerConnection>
		<url>svn://127.0.0.1/javadev/testapp/trunk/</url>
	</scm>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-release-plugin</artifactId>
				<version>2.5.2</version>
				<configuration>
					<tagBase>svn://127.0.0.1/javadev/testapp/tags/</tagBase>
					<branchBase>svn://127.0.0.1/javadev/testapp/branches</branchBase>
					<tagNameFormat>@{version}</tagNameFormat>
					<username>${scm.username}</username>
					<password>${scm.password}</password>
					<checkModificationExcludes>
						<checkModificationExclude>.project</checkModificationExclude>
						<checkModificationExclude>.settings</checkModificationExclude>
						<checkModificationExclude>.classpath</checkModificationExclude>
					</checkModificationExcludes>
			       </configuration>
			</plugin>
		</plugins>
	</build>
</project>

 

接着,確保你的全部代碼都提交了,若是你有未提交代碼,release插件會報錯,既然你要發佈版本了,就表示代碼是穩定的,因此要麼要麼把代碼提交了,要麼把本地的更改拋棄了。spa

 

2.4 進入testapp項目目錄

CMD下執行好一些

mvn release:prepare
執行過程當中,你會遇到這樣的提示:
What is the release version for "Unnamed - org.myorg:myapp:jar:1.0-SNAPSHOT"? (xxx.xxx.xxx) 0.0.1: :
——「你想將-0.0.1-SNAPSHOT發佈爲何版本?默認是0.0.1。」我要的就是0.0.1,直接回車。
What is SCM release tag or label for "Unnamed - xxx.xxx.xxx:jar:0.0.1-SNAPSHOT"? (xxx.xxx.xxx) 0.0.1: :
——「發佈的tag標籤名稱是什麼?默認爲0.0.1。」我仍是要默認值,直接回車。
What is the new development version for "Unnamed - xxx.xxx.xxx:jar:0.0.1-SNAPSHOT"? (xxx.xxx.xxx) 0.0.2-SNAPSHOT: :
——「主幹上新的版本是什麼?默認爲0.0.2-SNAPSHOT。」哈,release插件會自動幫我更新版本到0.0.2-SNAPSHOT,很好,直接回車。
而後屏幕刷阿刷,maven在build咱們的項目,並進行了一些svn操做,你能夠仔細查看下日誌。
那麼結果是什麼呢?你能夠瀏覽下svn倉庫:
咱們多了一個tag:

 


 
 

這就是須要發佈的版本0.0.1。
再看看trunk中的POM,其版本自動升級成了0.0.2-SNAPSHOT。
這不正是咱們想要的麼?等等,好像缺了點什麼,對了,0.0.1尚未發佈到倉庫中呢。
再一次屏住呼吸,執行:

mvn release:peform

 

maven-release-plugin會自動幫咱們簽出剛纔打的tag,而後打包,分發到遠程Maven倉庫中,至此,整個版本的升級,打標籤,發佈等工做所有完成。咱們能夠在遠程Maven倉庫中看到正式發佈的0.0.1版本。

這但是自動化的 正式的 版本發佈!

 

 

此時項目的pom.xml中 version變成了0.0.2-SNAPSHOT

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>cn.jaychang</groupId>
	<artifactId>testapp</artifactId>
	<version>0.0.2-SNAPSHOT</version>
	<packaging>jar</packaging>
...

 

 

存在問題

 

Maven多模塊項目,目前尚未實驗成功。

 多模塊項目結構(這裏看上去沒有跟SVN同步,多是Eclipse Mar的問題吧,實際這個項目已經check in到SVN上了):


 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>cn.jaychang.mybbs</groupId>
	<artifactId>mybbs-group</artifactId>
	<version>1.0.0-SNAPSHOT</version>
	<packaging>pom</packaging>
	<name>myapp</name>
	<url>http://maven.apache.org</url>

	<distributionManagement>
		<repository>
			<id>nexus-releases</id>
			<name>Internal Release Repository</name>
			<url>http://127.0.0.1:8081/nexus/content/repositories/releases/</url>
		</repository>
		<snapshotRepository>
			<id>nexus-snapshots</id>
			<name>Internal Snapshot Repository</name>
			<url>http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>
		</snapshotRepository>
	</distributionManagement>

	<scm>
		<connection>scm:svn:svn://127.0.0.1/javadev/mybbs/trunk/</connection>
		<developerConnection>scm:svn:svn://127.0.0.1/javadev/mybbs/trunk/</developerConnection>
		<url>svn://127.0.0.1/javadev/mybbs/trunk/</url>
	</scm>

	<modules>
		<module>mybbs-parent</module>
		<module>mybbs-common</module>
		<module>mybbs-business</module>
		<module>mybbs-web</module>
	</modules>
	<build>
		
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-release-plugin</artifactId>
				<version>2.5.2</version>
				<configuration>
					<tagBase>svn://127.0.0.1/javadev/mybbs/tags/</tagBase>
					<tagNameFormat>v@{project.version}</tagNameFormat>
					<username>${scm.username}</username>
					<password>${scm.password}</password>
					 <checkModificationExcludes>  
                        <checkModificationExclude>.project</checkModificationExclude>  
                        <checkModificationExclude>.settings</checkModificationExclude>
                        <checkModificationExclude>.classpath</checkModificationExclude>  
                    </checkModificationExcludes>
				</configuration>
			</plugin>
		</plugins>
	</build>

 
 

在mvn release:prepare階段 總是報

Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.2:prepare (default-cli) on project mybbs-group: Cannot prepare the release because you have local modifications :

[ERROR] [mybbs-common\.classpath:unknown]
[ERROR] [mybbs-common\.project:unknown]
[ERROR] [mybbs-parent\.project:unknown]
[ERROR] [mybbs-web\.classpath:unknown]
[ERROR] [mybbs-web\.project:unknown]
[ERROR] [pom.xml:modified]



 

 從錯誤上看,mybbs的pom.xml

的配置 <checkModificationExcludes> 
                        <checkModificationExclude>.project</checkModificationExclude> 
                        <checkModificationExclude>.settings</checkModificationExclude>
                        <checkModificationExclude>.classpath</checkModificationExclude> 
                    </checkModificationExcludes>

但對於mybbs-common,mybbs-business,mybbs-web  modoule模塊並無起做用。

這個問題困擾了很久,不知道怎麼解決,若是有誰知道,還請賜教哈

相關文章
相關標籤/搜索