簡體   English   中英

將Perforce scm配置為maven項目以獲取最新的更改列表

[英]Configuring Perforce scm into maven project to get latest changelist

我正在將項目遷移到Maven,因為我們習慣於通過Perforce SCM存儲庫中的最新更改編號引用我們的構建,我希望能夠提取此信息

我試圖通過以下資源配置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插件的可用操作中看到任何可以幫助我獲取最后的更改信息並將其集成到引用構建號中的內容。 我應該為此開發自己的插件嗎?

提前致謝。

我得到了一位可能有幫助的P4Maven開發人員的建議。

首先,檢查您的配置。 “”標簽中的“...”應該是“”標簽中的標簽名稱之一(即“連接”或“developerConnection”)

使用Maven和Perforce SCM有兩種選擇。

  1. 使用默認(內置)Maven Perforce SCM提供程序(基於p4命令行)

    • 請注意,您需要安裝p4命令行可執行文件
    • 您可以使用環境變量或JVM args設置用戶名和密碼

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

要么

[JVM args] -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>

...

  1. 使用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:localhost:1666:// depot / someproject scm4:localhost:1666:// depot / someproject scm4:// depot / someproject

...

  • 請注意,對於P4Maven,我們將覆蓋“maven-scm-plugin”插件中的默認提供程序。

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

我最近遇到了完全相同的問題 - 我只想獲得一個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>

問題問題已經過去了幾年,但是在間隔p4maven被重寫之后,更新的文檔很難找到。

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

我從Maven內部版本號插件頁面上的鏈接中發現了源代碼。

我在尋找類似問題的解決方案時登陸這里“我可以確定沒有配置”,我面對的是Code Collaborator客戶端與P4。 我最終卸載了P4客戶端並重新安裝以使其正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM