Mavenを使用してライブラリをリリースし、sourceforgeへのサイトデプロイを実行しようとしています(最初にインタラクティブシェルを作成しました)。リリースは、Jenkinsジョブによって行われます(Jenkins用のMavenリリースプラグインを使用)。
私は試した:
-X -e -Dresume=false -Dusername=puce release:prepare release:perform -Darguments="-Dusername=puce"
そして
-X -e -Dresume=false -Dusername=puce -Darguments=-Dusername=puce release:prepare release:perform
ただし、どちらの場合も、ジョブはsite:最初のモジュールのデプロイでハングします。
[INFO] --- maven-site-plugin:3.2:deploy (default-deploy) @ myproject-parent ---
[INFO] Parent project loaded from repository: myGroupId:myOtherproject-parent:pom:1.0
[INFO] Parent project loaded from repository: myGroupId:myOtherproject-parent:pom:1.0
Using private key: /opt/jenkins/.ssh/id_dsa
ジョブを停止すると、最後に次のように出力されます。
Password for ${username}@Shell.sourceforge.net: channel stopped
これはおそらく$ {username}が解決されなかったことを意味します。
$ {username}を解決するにはどうすればよいですか?
編集:
以下は正常に実行されることに注意してください。
site-deploy -Psonatype-oss-release -Dusername=puce
編集2: release:perform mavenの一部として、次のコマンドを実行します。
/usr/share/maven/bin/mvn -s /tmp/release-settings7797889802430474959.xml deploy site-deploy --no-plugin-updates --batch-mode -Psonatype-oss-release -P nexus -f pom.xml
-Dusername=puce
このMavenコマンドに渡されていないようです...
また、help:effective-pomは次のmaven-release-plugin構成を示していることに注意してください。
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.2</version>
<configuration>
<mavenExecutorId>forked-path</mavenExecutorId>
<useReleaseProfile>false</useReleaseProfile>
<arguments>-Psonatype-oss-release</arguments>
</configuration>
</plugin>
したがって、「arguments」が定義され、その値は、コマンドラインで渡された値ではなく、埋め込まれたmavenコマンドに到達しているように見えます。
オーバーライド
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.2</version>
<configuration>
<mavenExecutorId>forked-path</mavenExecutorId>
<useReleaseProfile>false</useReleaseProfile>
<arguments>-Psonatype-oss-release</arguments>
</configuration>
</plugin>
と
<plugin>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<mavenExecutorId>forked-path</mavenExecutorId>
<useReleaseProfile>false</useReleaseProfile>
<arguments>-Psonatype-oss-release -Dusername=${username}</arguments>
</configuration>
</plugin>
両親の一人でトリックをしました。
コマンドラインの値がPOMの値を上書きしないのはバグのようです。
私が過去に成功したことは次のとおりです。
POMファイルでプロパティを定義します。例:
<properties>
<release.arguments></release.arguments>
</properties>
POMプロパティをPOMファイルのプラグイン構成に追加します。例:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<arguments>${release.arguments}</arguments>
...
コマンドラインのプロパティを介して引数を渡します。例:
mvn release:prepare -Drelease.arguments="-N -Prelease"
お役に立てれば。
私の解決策はSander Verhagen's
に似ていました。ただし、行のみを追加しました。
実行方法:
mvn --batch-mode release:prepare -Denvironment=production
私の設定:
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<tag>${artifactId}-${version}-${environment}</tag>
<arguments>-Denvironment=${environment}</arguments>
<releaseProfiles>release</releaseProfiles>
</configuration>
</plugin>
</plugins>
</build>
違いは、サブモジュールが変数environment
を使用するようになり、それを2回定義する必要がないことです(つまり、-Darguments=-Denvironment=production -Denvironment=production
)。また、プロパティタグを追加しないという柔軟性も得られます。