2011-07-17 44 views
28

我試圖發佈一個使用git作爲SCM的多模塊maven項目,而我遇到的第一個問題是maven發佈插件的構建方式release.properties scm.url。我父POM看起來是這樣的:使用Git發佈多模塊maven項目

<packaging>pom</packaging> 
<groupId>org.project</groupId> 
<artifactId>project-parent</artifactId> 
<version>1.0.0-SNAPSHOT</version> 

<scm> 
    <connection>scm:git:git://github.com/username/project.git</connection> 
    <developerConnection>scm:git:[email protected]:username/project.git</developerConnection> 
    <url>http://github.com/username/project</url> 
</scm> 

<modules> 
    <module>api</module> 
    <module>spi</module> 
</modules> 

和模塊的POM是直截了當:

<parent> 
    <groupId>org.project</groupId> 
    <artifactId>project-parent</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
</parent> 
<artifactId>api</artifactId> 
<version>0.2.2</version> 

我的目標是能夠釋放單獨的模塊,因爲他們每個人都有不同的版本,我不希望每次發佈時都將所有版本一起增加。

當我更改爲api目錄,並做了mvn release:clean release:prepare我會見了以下的輸出:

[INFO] Executing: cmd.exe /X /C "git push [email protected]:username/project.git/api master:master" 
[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Unable to commit files 
Provider message: 
The git-push command failed. 
Command output: 
ERROR: Repository not found. 

它看起來像行家發佈插件通過附加模塊名稱爲創建scm.url developerConnection,它最終不是github上的有效存儲庫。我不知道設置這個的正確方法是什麼。 Maven + git +發佈一個單獨的子模塊可能無法正常工作?任何輸入讚賞。

回答

14

要了解如何使這項工作,看看工作的例子,如:

https://github.com/sonatype/sonatype-aether

但是,如果你想釋放各個部分,這將於事無補。在這種情況下,您必須將<scm>元素複製到所有poms中。

這是關於maven開發者列表討論的一個活躍話題,但不要屏住呼吸尋求解決方案;這是一個大問題。

+2

它看起來像是從頂級POM發佈的項目,而不是像我試圖做的那樣從各個模塊發佈。當我嘗試從其中一個模塊的目錄中釋放時,出現了問題。由於模塊版本不同,我能夠發佈各個模塊對我來說很重要,我不想同時增加所有模塊版本。 –

+1

我從來沒有見過任何人這樣做。 – bmargulies

+0

感謝您的信息。你碰巧有鏈接到maven開發人員名單上討論過這個問題的任何線程嗎? –

10

我通過搜索「git-push command failed」發現此問題。我有一個類似的配置,我有一個master-pom,然後是我作爲自己的maven包發佈的子模塊。

爲了得到它的工作,我不得不調整pom.xmlscm部分,如下所示。這些連接必須專門調整才行。沒有一個github的工作。

<scm> 
    <url>https://github.com/XXX/YYY</url> 
    <connection>scm:git:ssh://[email protected]/XXX/YYY.git</connection> 
    <developerConnection>scm:git:ssh://[email protected]/XXX/YYY.git</developerConnection> 
</scm> 

以上示例中的XXX是您的github用戶名。您不能使用:XXX格式([email protected]:XXX/...),因爲經過:的值被解釋爲端口號。 YYY顯然是您在XXX帳戶下的存儲庫名稱。

我剛剛成功地使用此模式一次性釋放了所有3個子模塊。

+0

這些URL適用於我。非常感謝 ! – Cristiano

0

一種簡單的方法,什麼工作對我來說是在模塊中使用父屬性pom.xml像後續的scm標籤類似如下:

<!--module pom.xml--> 
<scm> 
    <connection>${project.parent.scm.connection}</connection> 
    <developerConnection>${project.parent.scm.developerConnection}</developerConnection> 
</scm>