ドキュメントによると、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.xml
Mavenのコマンドライン引数を使用して、ファイルの場所を手動で指定することです。-s
arguments
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が正しく計算され、アーティファクトがアップロードされます)。