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模塊並無起做用。
這個問題困擾了很久,不知道怎麼解決,若是有誰知道,還請賜教哈