将Perforce scm配置为maven项目以获取最新的更改列表

时间:2012-03-27 08:00:47

标签: maven perforce maven-scm-plugin

我正在将项目迁移到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插件的可用操作中看到任何可以帮助我获取最后的更改信息并将其集成到引用构建号中的内容。我应该为此开发自己的插件吗?

提前致谢。

4 个答案:

答案 0 :(得分:2)

我得到了一位可能有帮助的P4Maven开发人员的建议。

首先,检查您的配置。 “”标签中的“...”应该是“”标签中的标签名称之一(即“连接”或“developerConnection”)

有两种方法可以将Maven与Perforce SCM结合使用。

  1. 使用默认(内置)Maven Perforce SCM提供程序(基于p4命令行)

    • 请注意,您需要安装p4命令行可执行文件
    • 您可以使用环境变量或JVM args
    • 设置用户名和密码
  2. [环境变量] 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)
    2. [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:本地主机:1666://库/ someproject     SCM4://库/ someproject   

      ...

      • 请注意,对于P4Maven,我们将覆盖“maven-scm-plugin”插件中的默认提供程序。

      • 请注意,我们使用“scmp4”(如果使用P4Maven)而不是“scmperforce”(内置默认值)作为提供者名称,因为现有的默认实现“perforce”。

答案 1 :(得分: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>

答案 2 :(得分:0)

自提出问题以来已经过了几年,但是在间隔p4maven已被重写,并且更新的文档很难找到。

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

我从Maven内部版本号插件页面上的链接中发现了源代码。

答案 3 :(得分:0)

我在寻找类似问题的解决方案时找到了这里“没有配置可以确定”我面对Code Collaborator客户端与P4。我最终卸载了P4客户端并重新安装以使其正常工作。