1

マルチモジュールのMavenプロジェクトを使用してリリースを実行しようとしています。私の目的は、すべてのpomのバージョンを変更し、SCMでタグを作成することです。そのため、Mavenリリースプラグインを使用しています。

このプロジェクトには、次のように簡略化した階層があります。

example/
    module1/
    module2/
        module-jni-linux/
        module-jni-macosx/

のpom.xmlには、次のexampleようなモジュールが含まれています。

<modules>
  <module>module1</module>
  <module>module2</module>
</modules>

また、のpom.xmlにmodule2は、OSタイプによって決定されるプロファイルに依存するモジュールが含まれています。

<profiles>
<!-- profile for linux -->
<profile>
  <id>linux</id>
  <activation>
    <os>
      <name>linux</name>
    </os>
  </activation>
  <modules>
    <module>module-jni-linux</module>
  </modules>
</profile>
<!-- profile for mac os -->    
<profile> 
  <id>macosx</id>
  <activation>
    <os>
      <name>mac os x</name>
    </os>
  </activation>
  <modules> 
    <module>module-jni-macosx</module> 
  </modules> 
</profile> 

最後に、それぞれmodule-jni-*がnative-maven-pluginを使用して、いくつかのC / C ++ソースをコンパイルし、共有ライブラリを生成します。


問題:

Mac OS Xボックスで試してみると、リリースプロセスでが考慮されていないmvn release:prepare -DdryRun=trueことに気付きました。module-jni-linuxつまり、すべてのモジュールが1.0.0 / 1.0.1-SNAPSHOTバージョンに渡されますが、module-jni-linux変更されません。release:prepareプロファイルがアクティブ化されていなくても、すべてのサブモジュールが更新されることを実行するときに必要です。

で両方のプロファイルをアクティブにしようとしましmvn -P linux,macosx ...たが、module-jni-linuxmac(およびその逆)ではビルドされません。

両方のサブモジュールのバージョンを更新するリリースを実行するにはどうすればよいですか?

4

2 に答える 2

1

親pom.xmlのMavenリリースプラグイン構成で、<arguments>有効にするプロファイルを指定するパラメーターを使用してみましたか?

詳細については、http://maven.apache.org/plugins/maven-release-plugin/prepare-mojo.htmlを参照してください。

基本的に、-P linux、macosxなどのプロファイルを含むMaven呼び出しに追加の引数を渡すことができます。

于 2010-10-21T14:21:22.957 に答える
1

わかりました、私はそれを行う方法を見つけました:

リリースを作成するために、maven-release-pluginはSCMにコミットする前にcleanverifyゴールを実行します。verify目標は、各モジュールをコンパイルしようとします。

私が今していることは、プラグインを構成して、verify目標のみを実行するようにすることです。しかし、verifyとにかく重要なので、さまざまな環境でリリースを行う前に手動で実行します。私のリリース手順は次のとおりです。

  1. mvn clean verifyMacとLinuxの両方の環境で実行します。このために、マルチノードハドソンジョブを構成しました。
  2. 実行するmvn release:prepare -P macosx,linux -DdryRun=true -DpreparationGoals=cleanと、両方のプロファイルがアクティブになりますが、コンパイルはスキップされます
  3. ドライランの結果が満足のいくものであることを確認してください
  4. 手順2を実行します-DdryRun=false
于 2010-10-21T15:01:31.330 に答える