2013-05-16 137 views
1

更新我檢舉此問題被關閉,因爲似乎沒有解決 - 插件根本就沒有表現,因爲它應該,沒有人似乎知道爲什麼。我已經結束了寫一個小程序,手動複製發佈插件自己的期望的行爲,使用其他插件,如scmversions。如果你想了解我是如何做到的,請隨時給我發電子郵件。Maven的版本:執行覆蓋首次發佈,以後每發佈


我最近把我的項目移到了maven。但是,我在發佈過程中遇到問題。

我的釋放過程如下:

mvn scm:checkout -DconnectionUrl=scm:svn:https://my-server/svn/my-project/trunk -DcheckoutDirectory=my-project 
cd my-project 
mvn --batch-mode release:prepare 
mvn release:perform 

我開始1.0.0-SNAPSHOT,我運行上面所示的釋放過程。這將更新我的回購以下(升序新奇):如預期,包括pom.xml更新指向1.0.1-SNAPSHOT和一個名爲my-project-1.0.0在我SCM創建標籤時

1.0.0-SNAPSHOT 
1.0.0 
1.0.1-SNAPSHOT 

一切。然而,當我再次運行程序,下面出現在我的回購:

1.0.0-SNAPSHOT 
1.0.1-SNAPSHOT 
1.0.0 
1.0.2-SNAPSHOT 

也就是說,釋放,從未創建1.0.1,而是1.0.1-SNAPSHOT被釋放到1.0.0。需要注意的是所有其他方面運行正常 - 在pom.xml現在指向1.0.2-SNAPSHOT,並在我的SCM名爲my-project-1.0.1創建一個標籤。

事實上,我每次運行的釋放過程中,快照增加,但釋放被寫入到1.0.0與不創建一個新的版本。例如,重新運行釋放過程3進一步倍結果如下:

1.0.0-SNAPSHOT 
1.0.1-SNAPSHOT 
1.0.2-SNAPSHOT 
1.0.3-SNAPSHOT 
1.0.4-SNAPSHOT 
1.0.0 
1.0.5-SNAPSHOT 

用於上述預期的行爲是:

1.0.0-SNAPSHOT 
1.0.0 
1.0.1-SNAPSHOT 
1.0.1 
1.0.2-SNAPSHOT 
1.0.2 
1.0.3-SNAPSHOT 
1.0.3 
1.0.4-SNAPSHOT 
1.0.4 
1.0.5-SNAPSHOT 

pom.xml爲第一個版本如下所示:下面

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

<modelVersion>4.0.0</modelVersion> 
<groupId>com.foo</groupId> 
<artifactId>my-project</artifactId> 
<packaging>jar</packaging> 
<version>1.0.0-SNAPSHOT</version> 
<name>my-project</name> 

<distributionManagement> 
    <repository> 
     <id>my-server</id> 
     <url>file://\\my-server\repo\</url> 
    </repository> 
</distributionManagement> 

<scm> 
    <developerConnection>scm:svn:https://my-server/svn/my-project</developerConnection> 
</scm> 

<build> 
    <plugins> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-release-plugin</artifactId> 
      <version>2.4.1</version> 
     </plugin>  

    </plugins> 


</build> 

<repositories> 
    <repository> 
     <id>my-server</id> 
     <url>file://\\my-server\repo\</url> 
    </repository> 
</repositories> 

</project> 

答案之一建議我應該創建一個單獨的releasesnapshot回購,我卻沒有。這是否會導致問題?

請注意,我用的詹金斯每當代碼致力於自動調用mvn deploy。然而這也正是作爲預期(取版本承諾pom.xml被指定爲回購協議,即部署),所以我懷疑這是問題的一部分。

非常感謝您的任何幫助。


更新

檢查從mvn release:perform命令我看到下面的輸出:

Checking out the project to perform the release ... 
Executing: cmd.exe /X /C "svn --non-interactive checkout https://my-server/svn/my-project/tags/my-project-1.0.2 c:\localrelease\mvn\my-project\target\checkout" 
Working directory: c:\localrelease\mvn\my-project\target 
Invoking perform goals in directory c:\localrelease\mvn\my-project\target\checkout\tags\my-project-1.0.0\trunk 
Executing goals 'deploy'... 

而且有它每次釋放到1.0.0的原因 - 它檢查出來的更新標籤,但在舊標籤1.0.0上發佈(即使1.0.1標籤存在於目標/檢出文件夾中)。它爲什麼這樣做?


更新2

我已經分裂到2個獨立的存儲庫(一個快照和一個目標),而此問題仍然出現。

另外,我在調查日誌release:perform時注意到了一些事情:標籤my-project-1.0.1的結帳包含1.0.0的標籤。同樣,標籤1.0.2的結帳包含標籤1.0.01.0.1等。這是正確的行爲嗎?

或許釋放過程中總是在尋找什麼的它檢查出來,並使用第一個找到,這將永遠是1.0.0每一個版本除了的第一個版本標籤的文件夾。

這似乎是一個非常奇怪的解釋,但它是迄今爲止我所見到的行爲中唯一的一個。現在的問題是,我錯誤地在我的pom.xml中配置了什麼,導致這種情況發生?

另一個注意事項:執行釋放時,部署目標投訴'build.plugins.plugin.version' for org.apache.maven.plugins:maven-xxxx-plugin is missing.對於maven-javadoc-pluginmaven-deploy-pluginmaven-source-plugin。我需要明確添加這些嗎?

回答

4

的第一件事情是,你開始是錯誤的版本:

  1. 檢查出最新的代碼(與當前指向1.0.0最新POM)
  2. 創建一個新版本1.0.1 -SNAPSHOT
  3. 更新POM,以指向1.0.1的快照和提交其

通常的方法是開始一個快照版本(也是第一個開發步驟),原因快照表明它是正在開發之中。

  1. 結賬最新的版本1.0.0-SNAPSHOT
  2. 代碼將創建SVN標籤1.0.0和創造新的聚甲醛的(maven-release-prepare describes the detailed steps)。
  3. 創建新版本1.0。1 - 快照

後釋放:執行將執行以下操作:

結賬標記的1.0.0版本,並會部署站點部署maven-release-perform

而且下次調用下一個開發週期的發佈週期將從1.0.1-SNAPSHOT到1.0.1版本和1.0.2-SNAPSHOT。

除了上述內容,您應該使用庫管理器,如Artifactory, Nexus, Archiva instead of a file repository。如果某個RepoMgmt有一個單獨的SNAPSHOT存儲庫和可以隨時清理SNAPSHOT存儲庫的版本,您也可以與應以正確的方式來完成,如下面的文件訪問權限的設置:

<distributionManagement> 
    <repository> 
     <id>releases</id> 
     <url>file:///C:/maven/releases</url> 
    </repository> 
    <snapshotRepository> 
     <id>snapshots</id> 
     <url>file:///C:/maven/snapshots</url> 
    </snapshotRepository> 
    <site> 
     <id>site</id> 
     <url>file:///C:/maven/sites/${project.groupId}/${project.artifactId}/${project.version}</url> 
    </site> 
</distributionManagement> 

此外,如果你做另外的快照,並釋放存儲庫的元數據文件將尋求在釋放存儲庫和快照庫不同。

默認的發佈週期是從快照在釋放將一個快照這樣的:

1. Cycle 
1.0.2-SNAPSHOT 
1.0.2 
1.0.3-SNAPSHOT 

2. Cycle 
1.0.3-SNAPSHOT 
1.0.3 
1.0.4-SNAPSHOT 

3. Cycle 
1.0.4-SNAPSHOT 
1.0.4 
1.0.5-SNAPSHOT 

and so forth. 
+0

謝謝你的迴應。我可能在我的問題中解釋得很差,但我確實瞭解應該發生的週期。也許這是由於不正確的設置(我今天將從一張乾淨的紙上進行測試),但問題似乎是'release:perform'總是寫入1.0.1。目前我在1.0.7-SNAPSHOT上;當我運行釋放過程時,它移動到1.0.8-SNAPSHOT,但隨後'釋放'到1.0.1,而不是1.0.7。每次我運行'release:perform'時,它都會覆蓋第一個發行版。初始回購設置中的某些錯誤是否會導致此問題? –

+0

我嘗試了一個完全和新的項目(雖然仍然只有一個存儲庫),並再次出現同樣的問題。從'1.0.0-SNAPSHOT'開始,我運行釋放過程並將1.0.0發佈到回購站,將標籤'my-project-1.0.0'添加到SCM和'1.0.1-SNAPSHOT'在回購中創建(並且更新了poms)。當我再次運行釋放過程時,將標記'my-project-1.0.1'添加到SCM,將'1.0.2-SNAPSHOT'添加到回購中,但釋放'1.0.1'從不出現在回購中 - 相反'1.0.0'被覆蓋。任何想法是什麼造成這種情況?單個存儲庫是否是問題? –

+0

這不可能。你可以把這個完整的項目推到Github上,或者在github上做一個主題,所以我可以看看它。 – khmarbaise

0

我有完全相同的問題,事實證明,問題是SCM connectiondeveloperConnection配置。我已經使用標準SVN佈局(tunk,分支,標籤)了,可是我所提供的網址,我回購的根目錄下:

<scm> 
    <connection>scm:svn:file:///C:/var/svn/main</connection> 
    <developerConnection>scm:svn:file:///C:/var/svn/main</developerConnection> 
</scm> 

相反,我應該有trunk

提供的網址
<scm> 
    <connection>scm:svn:file:///C:/var/svn/main/trunk</connection> 
    <developerConnection>scm:svn:file:///C:/var/svn/main/trunk</developerConnection> 
</scm> 

就是這樣。根據當前的project.version,添加/trunk導致maven-release-plugin發佈我的模塊。