繁体   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