2012-01-24 43 views
5

我正在嘗試通過Maven發佈插件進行發佈,並遇到與SCM配置有關的問題。我使用安裝了m2eclipse的Eclipse。我們使用Mercurial並在我的機器上(Win7)安裝了TortoiseHg。我有一個創建jar的測試項目。我們爲我們的項目利用超級pom,所以測試項目pom也是如此。我已經建立了這個在超級POM:使用Maven/Hudson/Mercurial進行發佈

<build> 
    <plugins> 
     .... 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-scm-plugin 
      <version>1.6</version> 
      <configuration> 
       <connectionType>connection</connectionType> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

我的測試項目POM看起來是這樣的:

<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>my.group</groupId> 
    <artifactId>TestJar 
    <version>1.0-SNAPSHOT</version> 
    <parent>  
     <groupId>my.group</groupId> 
     <artifactId>super-pom</artifactId> 
     <version>1.0</version> 
    </parent> 
    <scm> 
     <connection> 
      scm:hg:ssh://our.scm.server:22//path/to/TestJarProject 
     </connection> 
     <developerConnection> 
      scm:hg:ssh://our.scm.server:22//path/to/TestJarProject 
     </developerConnection> 
    </scm> 
</project> 

請注意,我們ssh到我們的SCM服務器。我懷疑我遇到的一些問題與此有關。我只能找到使用http的示例。

在我的settings.xml文件,我添加了這個:

<servers> 
    ... 
    <server> 
     <id>our.scm.server</id> 
     <username>username</username> 
     <password>password</password> 
    </server> 
</servers> 

當我運行版本:準備發佈:執行,一個對話的TortoisePlink彈出提示我輸入密碼。該對話框詢問「@ our.scm.server的密碼」。

它似乎沒有使用settings.xml文件中的用戶名或密碼,這正是我期望通過向其添加服務器元素來實現的。它應該是?我也嘗試添加我的用戶名連接url:

<connection> 
    scm:hg:ssh://[email protected]:22//path/to/TestJarProject 
</connection> 

但我仍然提示輸入一個空的用戶名密碼。

問題一

有沒有人成功地使用ssh連接到水銀,而這樣做的Maven發行版?

因爲我最終想要做的建立在哈德森,我成立了一個哈德森工作做的釋放,但它失敗,此錯誤:

[INFO] o.h.m.e.h.MavenExecutionResultHandler - Build failed with exception(s) 
[INFO] o.h.m.e.h.MavenExecutionResultHandler - [1] org.apache.maven.lifecycle.\ 
    LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:\ 
    maven-release-plugin:2.0:prepare (default-cli) on project TestJar: Cannot \ 
    prepare the release because you have local modifications : 
[.maven/repo/ca/shaw/eng/nms/nms-super-pom/1.0/_maven.repositories:unknown] 
[.maven/repo/ca/shaw/eng/nms/nms-super-pom/1.0/nms-super-pom-1.0.pom:unknown] 
[.maven/repo/ca/shaw/eng/nms/nms-super-pom/1.0/nms-super-pom-1.0.pom.sha1:unknown] 
... many, many more lines of this nature ..... 

問題二

什麼地方修改Maven遇到?

由於該項目正在從回購中拉出,我所能想到的唯一更改就是對pom文件的更新(從版本中刪除SNAPSHOT)。但Maven不應該因爲它自己做出改變而抱怨,不是嗎?

UPDATE

按khmarbaise的建議,我已經添加到了我的父POM:

<pluginManagement> 
    <plugins> 
     <plugin> 
      <artifactId>maven-release-plugin</artifactId> 
      <version>2.2.2</version> 
     </plugin> 
    </plugins> 
</pluginManagement> 
+0

首先在你父母的地方做一個pluginManagement部分,並配置一個更新版本的maven-release-plugin,因爲你使用的是2.0,這有點過時了......你使用哪個Maven版本?哈德森是最新的?使用Hudson的發佈插件? – khmarbaise

+0

我們使用Hudson 2.1.2和Maven 3(與Hudson捆綁在一起) – sdoca

+0

您是否首先檢查了是否可以在沒有Hudson的情況下在命令行上發佈一個版本? (添加插件管理部分?) – khmarbaise

回答

2

問題一

有沒有人成功地使用ssh連接到Mercurial在做Maven發佈時?

答案似乎是Maven Release Plugin只能用於https。我們能夠獲得通過HTTPS一般跟隨此頁面上的說明我們的Mercurial服務器上的工作:

https://www.mercurial-scm.org/wiki/HgWebDirStepByStep

問題二

什麼地方的修改是Maven的遭遇?

本地修改是在構建期間創建的.maven目錄。通過將.maven/*添加到我的.hgignore文件中,我能夠完成構建。

0

我現在無法再現此權限,但從早期經驗中我記得ssh連接只有使用基於密鑰的身份驗證,而不使用用戶名和密碼。這不一定是特定於發佈插件和/或其Mercurial支持。

編輯:我已經嘗試基於密鑰的ssh訪問與Mercurial和發佈插件版本2.4.1今天,它很好地工作。一個可能的問題是SCM URL格式。在我的情況是:

scm:hg:ssh://[email protected]/path 

所以回答你的問題之一是:是的,但不能與用戶名/密碼認證。我沒有遇到任何「本地修改」問題,但是我的目標是在我的.hgignore中,所以可能就是這樣。

相關問題