7

ドキュメントによると、Mavenのrelease:performゴールはプロジェクトをチェックアウトし、新しいMavenインスタンスをフォークしてビルドします。何らかの理由で、フォークされたインスタンスはユーザーのを無視しているように見えますsettings.xml。これは、私の場合、そのファイルに親pomでリポジトリのURLを構成するために使用されるプロパティの定義があるためにエラーが発生します。

  • ユーザーのsettings.xml
    常にアクティブな「nexus」プロファイルのプロパティの定義。

    <profiles>
      <profile>
        <id>nexus</id>
        <properties>
          <dist.url>http://host.com/nexus/content/repositories</dist.url>
        </properties>
      </profile>
    </profiles>
    
    <activeProfiles>
      <activeProfile>nexus</activeProfile>
    </activeProfiles>
    
  • 親のpom.xml
    リポジトリのURLを構成するための定義済みプロパティの使用法。

    <distributionManagement>
      <repository>
        <id>nexus</id>
        <url>${dist.url}/releases</url>
      </repository>
    </distributionManagement>
    
  • 実行されたコマンド:

    mvn release:perform
    
  • 出力(プロジェクトのチェックアウト、ビルド、テスト、およびパッケージ化が正常に行われたことを示した後):

    [INFO] Uploading: ${dist.url}/releases/com/acme/access/my-project/1.0/my-project-1.0.jar
    [INFO] [INFO] ------------------------------------------------------------------------
    [INFO] [INFO] BUILD FAILURE
    [INFO] [INFO] ------------------------------------------------------------------------
    [INFO] [INFO] Total time: 3.659s
    [INFO] [INFO] Finished at: Wed Aug 01 14:40:23 EDT 2012
    [INFO] [INFO] Final Memory: 21M/307M
    [INFO] [INFO] ------------------------------------------------------------------------
    [INFO] [WARNING] The requested profile "nexus" could not be activated because it does not exist.
    [INFO] [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project my-project: Failed to deploy artifacts: Could not transfer artifact com.acme.access:my-project:jar:1.0 from/to nexus (${dist.url}/releases): Error transferring file: no protocol: ${dist.url}/releases/com/acme/access/my-project/1.0/my-project-1.0.jar -> [Help 1]
    

フォークされたMavenインスタンスが${dist.url}にアップロードしようとしていることに注目してください。これは、settings.xmlで定義されたプロパティが読み取られなかったことを示しています。また、警告メッセージは、プロファイル「nexus」が見つからなかったことを通知します。メインのMavenインスタンスがプロファイル情報をフォークされたインスタンスに渡したので、それを探すことはわかっていたと思いますが、ユーザーのsettings.xmlを無視した(または見つけられなかった)ため、そのプロファイルを見つけることができませんでした。

これを回避するために私が見つけた唯一の方法は、プラグインの引数で「ラップ」されたsettings.xmlMavenのコマンドライン引数を使用して、ファイルの場所を手動で指定することです。-sarguments

mvn release:perform -Darguments="-s C:\Users\theuser\.m2\settings.xml"

プラグインは期待どおり/正しい方法で動作していますか?settings.xml上記のようにファイルの場所を指定せずに、ユーザーの内部にプロパティ定義を保持する方法はありますか?

詳しくは:

  • settings.xmlプロファイル情報をグローバルにコピーするとプラグインが機能するため、プラグインがユーザーを見つけられないことが特に問題のようsettings.xmlです。

  • 実行中はプロファイルがアクティブであることを示しているため、ユーザーのsettings.xml名前は適切に作成/作成されます。help:active-profilesを使用して手動でビルドおよびデプロイすることmvn clean deployも正しく機能します(つまり、リポジトリURLが正しく計算され、アーティファクトがアップロードされます)。

4

1 に答える 1

10

これは必ずしもmaven-release-pluginのバグではありません。このMavenのバグに遭遇したようです:MNG-5224 このバグはMaven3.0.4で修正されるはずです。

于 2012-08-01T21:32:27.457 に答える