2012-05-10 14 views
12

Maven Guruコミュニティが次のタスクを手伝ってくれれば素晴らしいと思います。リリース+バージョンのプラグインでリリース手順を完全に自動化

リリースプロセスがバッチモードで実行されるように、HudsonのMavenモジュールのリリースプロセスを自動化したいと思います(コンソールから何か質問する必要はありません)。現在私は共通のステップrelease:prepareを使用しています(コミットする前に最新バージョンの親に更新する場合は<preparationGoals>versions:update-parent clean verify</preparationGoals>)+ release:perform。調製工程中に

Somewhen:しかし、私は次の操作を行うためにMavenを希望、現在のモジュールと親groupIdに一致するすべての依存関係のために

  • リリースされたバージョンで-SNAPSHOTを置き換える(例えばversions:use-releases -Dincludes=???を) 。リリース後

Somewhen:現在のモジュールと親groupIdに一致するすべての依存関係について

  • -SNAPSHOTバージョン(例えばversions:use-latest-snapshots ...)とリリースバージョンを置き換えます。

例:私はそれのように感じる

<parent> 
    <groupId>org.mycompany.myproject</groupId> 
    <artifactId>myproject-parent</artifactId> 
    <version>1.1-SNAPSHOT</version> 
</parent> 

<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>myproject-api</artifactId> 
    <version>1.2-SNAPSHOT</version>   
</dependency> 

<parent> 
    <groupId>org.mycompany.myproject</groupId> 
    <artifactId>myproject-parent</artifactId> 
    <version>1.0</version> 
</parent> 

<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>myproject-api</artifactId> 
    <version>1.1</version>   
</dependency> 

と成功したリリース後

がに変換されます。タグ付けされているモジュールの前

<parent> 
    <groupId>org.mycompany.myproject</groupId> 
    <artifactId>myproject-parent</artifactId> 
    <version>1.0-SNAPSHOT</version> 
</parent> 

<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>myproject-api</artifactId> 
    <version>1.1-SNAPSHOT</version>   
</dependency> 

がに変換されます

の混合物が必要です

versions:use-releases scm:commit release:prepare release:perform versions:use-latest-snapshots scm:commit

しかし、これを実行する最善の方法はわかりません。できるだけコミットを少なくするのが良いでしょう。難点は、-SNAPSHOTのバージョンチェック後に実行されることです。

親プロジェクトが<modules>で子を参照していないという意味で、説明されたプロジェクトはマルチモジュールプロジェクトではありません。 SCM構造は以下の通りです:

. 
| 
+-- myproject-parent 
| +-- pom.xml 
+-- myproject-api 
| +-- pom.xml 
+-- myproject-impl 
    +-- pom.xml 

依存関係は以下のとおりです。

myproject-api → myproject-parent 
myproject-impl → myproject-parent 
myproject-impl → myproject-api 

プロジェクトの親POM(myproject-parentは)めったに解放されませんので、最初にリリースされます。次にmyproject-api(必要な場合)、次にmyproject-impl

答えて

5

あなたが持っている単純な問題は、あなたの子供があなたの子供と異なるバージョン番号を持っていることです。それは、マルチモジュールビルドのための間違った方法です。マルチモジュールビルドは、同じバージョン番号を持つために同じリリースプロセスを持つ複数のモジュールを関連付けることを意図しています。そのガイドラインに従えば、バージョンプラグインは必要ありません。リリースでのみリリースを行います:準備とリリース:実行それだけです。

更新:(。下流/上流DEPS) さらなる議論の後、私はセットアップにモジュール間の依存関係が含まれているハドソンジョブの新しいセットを提案し、次のトリガ各ハドソンジョブのリリースを行うだろう仕事の列の中などである。これは、バージョンコントロール内に別個のモジュールと別個の領域を持つことを前提としています。そうしないと、この戦いはMavenで失われ、命を複雑にします。

+3

私はあなたに同意できません。私たちはフラットなモジュール構造を持っています:これはハドソンでそれらを分割して独立させる唯一の方法です(そうでなければ、サブモジュールのテスト失敗はプロジェクト全体のビルドに失敗します)。一部のモジュール(親のPOMなど)はほとんど変更されません。リリースする必要はありません。他のもの(「モデル」など)は数回リリースされます。 2つのマルチモジュールプロジェクトの間に依存関係があると、あなたの助言はうまくいきません。また、マルチモジュールビルドであっても、私は 'release:prepare'が' -SNAPSHOT'の依存関係を ''将来のリリース ''バージョンに置き換えるという証拠はありません。 –

+0

まず、テストが失敗した場合は、ビルド全体が失敗する場合は何かが間違っているといいでしょう。質問はなぜあなたがハドソンで分かれているのが好きですか?これはマルチモジュールビルドであるか、それともマルチモジュールビルドではありません。さらに、親がpomがまれにしか変更されていない場合は、別のモジュールになる可能性があります。独自のリリースサイクルがあり、それを解放する必要があります。モジュール間に依存関係がある場合、マルチモジュールビルドでは何が完璧に機能するのでしょうか。 https://github.com/khmarbaise/javaeeを例に見てみることをお勧めします。 – khmarbaise

+0

_最初にテストが失敗したら良いと言えるでしょう何かが間違っているためビルド全体が失敗するでしょう_ いつも便利なわけではありません。私たちのプロジェクトでは、小さなグループの開発者が独自のモジュールで作業します。各モジュールには、ビルドが失敗したときに電子メールを送信するための電子メール通知リストがあります。したがって、 'X'と' Y'は 'A'と' B'モジュールを担当しています。 –

関連する問題