web-dev-qa-db-ja.com

Mavenリリースビルドに引数を渡す

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コマンドに到達しているように見えます。

12
Puce

オーバーライド

<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の値を上書きしないのはバグのようです。

8
Puce

私が過去に成功したことは次のとおりです。

  • 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"
    

お役に立てれば。

18
Sander Verhagen

私の解決策は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)。また、プロパティタグを追加しないという柔軟性も得られます。

0
Bevilaqua