6

プロジェクトを Maven に移行しています。Perforce SCM リポジトリの最新の変更番号で常にビルドを参照していたため、この情報を抽出できるようにしたいと考えています。

次のリソースを使用して Maven scm プラグインを構成しようとしています。

最初に私はそれを機能させる方法を理解していないので、誰かが完全に機能する例を持っているなら、私は喜んで喜んでいます.

<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

4 に答える 4

2

P4Maven 開発者の 1 人から役立つアドバイスをもらいました。

まず、構成を確認します。"" タグの "..." は、"" タグのタグ名の 1 つにする必要があります (つまり、"connection" または "developerConnection")。

Perforce SCM で Maven を使用するには、2 つのオプションがあります。

  1. デフォルトの (組み込み) Maven Perforce SCM プロバイダーを使用する (p4 コマンドライン ベース)

    • p4コマンドライン実行可能ファイルをインストールする必要があることに注意してください
    • 環境変数または JVM 引数を使用して、ユーザー名とパスワードを設定できます。

[環境変数] 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>

...

  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」プラグイン内のデフォルト プロバイダーをオーバーライドしていることに注意してください。

  • 「perforce」は既存のデフォルト実装で使用されるため、「scmperforce」(組み込みのデフォルト)の代わりに「scmp4」(P4Maven を使用している場合)をプロバイダー名として使用していることに注意してください。

于 2012-03-28T19:06:50.970 に答える
1

最近、まったく同じ問題に苦しんでいました。Perforceのリビジョン番号を取得して、Mavenアーティファクトで(たとえば、名前の一部として)使用したかっただけです。buildnumber-maven-pluginを確認しましたが、Perforceをまったくサポートしていません。私もmaven-release-pluginを試しましたが、それが多すぎて、必要なことを実行できるかどうかさえわかりませんでした。

とにかく私は私が好きではない解決策に行き着きました、しかしそれはうまくいきます。このリビジョン番号は、antおよびantrunプラグインを介してp4実行可能ファイルで直接取得します(antプロパティをmavenにエクスポートするには、最新の1.7バージョンを使用する必要があります)。また、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>
于 2012-04-26T09:20:29.800 に答える
0

質問が出されてから数年が経ちましたが、その間に p4maven が書き直され、更新されたドキュメントを見つけるのは驚くほど困難です。

これが新しいREADME.mdです。私はそれをフォローしましたが、すべてが機能します。この時点で、1.0.6 がmaven centralの最新バージョンです。

Maven ビルド番号プラグイン ページのリンクからソースを発見しました。

于 2016-06-01T21:10:09.780 に答える
0

P4のCode Collaboratorクライアントで直面した同様の問題「NO Configuration could be determinned」の解決策を探しているときに、ここに着陸しました。P4 クライアントをアンインストールし、再インストールして動作させることになりました。

于 2016-07-13T09:28:58.720 に答える