2012-03-27 27 views
5

我正在將項目遷移到Maven,因爲我們通常會使用我們的Perforce SCM存儲庫中的最新更改編號來引用我們的構建,所以我希望能夠提取此信息將Perforce scm配置到maven項目中以獲取最新的更改列表

我想通過以下資源配置Maven插件SCM:

首先,我不知道如何使它發揮作用,因此,如果任何人有一個完全工作的例子,我會很樂意,就在我身邊我已經在我的POM加試:

<scm> 
    <connection> 
     scm:perforce:localhost:1666://depot/ 
     <my_project> 
      /
      <version> 
    </connection> 
    <developerConnection> 
     scm:perforce:localhost:1666:/depot/ 
     <my_project> 
      /
      <version> 
    </developerConnection> 
    <url>http://somerepository.com/view.cvs</url> 
</scm> 
... 
<plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-scm-plugin</artifactId> 
     <version>1.6</version> 
     <dependencies> 
      <!-- P4Maven --> 
      <dependency> 
       <groupId>com.perforce</groupId> 
       <artifactId>p4maven</artifactId> 
       <version>[2011,2012)</version> 
      </dependency> 
     </dependencies> 
     <configuration> 
      <connectionType>//depot/proto/kernel/kernel/04.00/maven2</connectionType> 
      <username>my local username</username> 
      <password>xxxxxx</password> 
      <includes>**</includes> 
     </configuration> 
    </plugin> 
</plugins> 

這是導致我:

[INFO] --- maven-scm-plugin:1.6:checkout (default-cli) @ kernel --- 
mars 27, 2012 9:54:08 AM org.sonatype.guice.bean.reflect.Logs$JULSink warn 
Avertissement: Error injecting: org.apache.maven.scm.provider.svn.svnexe.SvnExeScmProvider 
java.lang.NoClassDefFoundError: org/apache/maven/scm/command/info/InfoScmResult 

肯定忘了什麼事,我會再次嘗試閱讀說明書,看看我錯過了,但如果有人知道...

不管怎樣,我的問題是相當:是它我是否嘗試它? 我從scm插件的可用操作中看不到任何有助於獲取最新更改信息並將其集成到參考內部版本號的任何內容。我應該爲此開發自己的插件嗎?

在此先感謝。

回答

2

我從P4Maven開發者那裏得到了一些建議,可能會有所幫助。

首先,檢查你的配置。 「」標籤中的「...」應該是「」標籤中的標籤名稱之一(即「連接」或「developerConnection」)

有兩種選擇可以使用Maven與Perforce SCM。

  1. 使用默認(內置)Maven的Perforce公司的SCM提供商(基於P4命令行)

    • 請注意,您所需要的P4命令行可執行安裝
    • 您可以設置用戶名和使用環境變量或JVM ARGS密碼

[環境變量] P4CLIENT = P4USER = P4PASSWD =

[JVM參數] -Dusername = -Dpassword =

[pom.xml中] ...

... 

    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-scm-plugin</artifactId> 
    <version>1.4</version> 
    </plugin> 

    ... 

...

<!-- SCM Settings --> 
    <scm> 
    <connection>scmerforce:localhost:1666://depot/someproject</connection> 
    <developerConnection>scmerforce:localhost:1666://depot/someproject</developerConnection> 
    <url>scmerforce://depot/simple</url> 
    </scm> 

...

  • 使用P4Maven Perforce的SCM提供商(基於P4Java)
  • [pom.xml中]

    ...

    ... 
    
        <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-scm-plugin</artifactId> 
        <version>1.4</version> 
        <dependencies> 
         <!-- P4Maven --> 
         <dependency> 
         <groupId>com.perforce</groupId> 
         <artifactId>p4maven</artifactId> 
         <version>[2011,2012)</version> 
         </dependency> 
        </dependencies> 
        <configuration> 
         <connectionType>connection</connectionType> 
         <username>someuser</username> 
         <password>somepassword</password> 
         <includes>**</includes> 
        </configuration> 
        </plugin> 
    
        ... 
    

    ...

    SCM4:本地主機:1666://倉庫/ someproject SCM4 :localhost:1666:// depot/someproject scm4:// depot/someproject

    ...

    • 注意,對於P4Maven我們覆蓋的 「行家-SCM-插件」 插件內的默認提供。

    • 請注意,我們使用「scmp4」(如果使用P4Maven)而不是「scmperforce」(內置默認值)作爲提供者名稱,因爲「perforce」是由現有默認實現採用的。

    +0

    感謝您的回答,我會試一試,然後再回來 – Gurvan 2012-04-18 10:35:14

    1

    我是用完全相同的問題最近掙扎 - 我只是想獲得一個Perforce版本號使用它的Maven構件(例如作爲名稱的一部分)。我檢查了buildnumber-maven-plugin,但它根本不支持Perforce。我也試過maven-release-plugin,但在我看來,因爲它太多了,我甚至沒有發現它是否會做我所需要的。

    無論如何,我結束了我不喜歡的解決方案,但它的工作原理。我通過ant和antrun插件直接使用p4可執行文件獲得此修訂版本號(您必須使用最新的1.7版本將ant屬性導出爲maven)。您還需要有可用的p4可執行文件。

    使用此插件配置後,您在$ maven中可以使用$ {revision.number}。

    <!-- Get Perforce latest change number --> 
    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-antrun-plugin</artifactId> 
        <version>1.7</version> 
        <dependencies> 
         <dependency> 
          <groupId>ant-contrib</groupId> 
          <artifactId>ant-contrib</artifactId> 
          <version>1.0b3</version> 
         </dependency> 
        </dependencies> 
        <configuration> 
         <exportAntProperties>true</exportAntProperties> 
        </configuration> 
        <executions> 
         <execution> 
          <phase>validate</phase> 
          <goals> 
           <goal>run</goal> 
          </goals> 
          <configuration> 
           <target> 
            <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="maven.plugin.classpath"/> 
            <!-- Login to p4 --> 
            <exec executable="p4" inputstring="${p4.password}"> 
             <arg value="-p${p4.server}"/> 
             <arg value="-c${p4.client}"/> 
             <arg value="-u${p4.username}"/> 
             <arg value="login"/> 
            </exec> 
            <!-- Get reivision description text --> 
            <exec executable="p4" outputproperty="revision.description"> 
             <arg value="-p${p4.server}"/> 
             <arg value="-c${p4.client}"/> 
             <arg value="-u${p4.username}"/> 
             <arg value="changes"/> 
             <arg value="-m1"/> 
             <arg value="//...#have"/> 
            </exec> 
            <!-- Logout from p4 --> 
            <exec executable="p4"> 
             <arg value="-p${p4.server}"/> 
             <arg value="-c${p4.client}"/> 
             <arg value="-u${p4.username}"/> 
             <arg value="logout"/> 
            </exec> 
    
            <!-- Parse revision description to retrieve only revision number --> 
            <propertyregex property="revision.number" 
                input="${revision.description}" 
                regexp="Change ([0-9]*) on ([a-z,0-9]*)" 
                select="\1" 
                casesensitive="false"/> 
    
            <echo>Perforce latest revision number: ${revision.number}</echo> 
           </target> 
          </configuration> 
         </execution> 
        </executions> 
    </plugin> 
    
    +0

    嗨,我最終通過做同樣的事情,但做了一個maven插件。確實不是很令人滿意。 – Gurvan 2012-05-15 09:59:45

    +0

    我希望有更好的解決方案。 – banterCZ 2012-10-15 12:03:42

    0

    這是一個幾年以來,有人問,但在區間p4maven被改寫,並且更新的文檔令人吃驚很難找到。

    這是新的README.md。我遵循它,一切正常。此時,1.0.6是maven central中的最新版本。

    我從Maven build編號插件頁面上的鏈接中發現了源代碼。

    0

    我在尋找類似問題的解決方案時找到了這個解決方案,「我的代碼協作者客戶端使用P4時遇到了」NO Configuration is determined「。我最終卸載了P4客戶端並重新安裝以使其工作。

    相關問題