12

Maven の第一人者コミュニティが次のタスクで私を助けてくれれば素晴らしいことです。

Hudson での Maven モジュールのリリース プロセスを、リリース プロセスがバッチ モードで実行されるように自動化したいと考えています (コンソールから何も要求する必要はありません)。現在、私は一般的な手順を使用していますrelease:prepare<preparationGoals>versions:update-parent clean verify</preparationGoals>コミットする前に親を最新バージョンに更新する)+ release:perform. ただし、Mavenに次のことをしてもらいたい:

準備段階のいつか:

  • groupId現在のモジュールと親のに一致するすべての依存関係について-SNAPSHOT、リリースされたバージョンに置き換えます (例: versions:use-releases -Dincludes=???)。

リリース後のいつか:

  • groupId現在のモジュールと親のに一致するすべての依存関係について、リリース バージョンをバージョンに置き換えます-SNAPSHOT(例: versions:use-latest-snapshots ...)。

例:

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

モジュールがタグ付けされる前は、次のように変換されます。

<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.1-SNAPSHOT</version>
</parent>

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

の混合が必要な気がします。

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

しかし、これを行う最善の方法が何であるかはわかりません。特に、可能な限りコミットを少なくするとよいでしょう。難しいのは、バージョン チェックのreparationGoals後に実行されることです。-SNAPSHOT

説明されているプロジェクトは、親 POM が を介してその子を参照していないという意味で、マルチモジュール プロジェクトではありません<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.

4

1 に答える 1

5

あなたが抱えている単純な問題は、親が子とは異なるバージョン番号を持っていることです。これは、マルチモジュール ビルドの間違った方法です。マルチモジュール ビルドは、同じリリース プロセスを持ち、その後に同じバージョン番号を持つ多数のモジュールを関連付けることを目的としています。そのガイドラインに従えば、バージョン プラグインは必要なく、 release:prepare と release:perform を介してのみリリースを行います。

更新: さらに議論した後、モジュール間の依存関係 (ダウンストリーム/アップストリーム deps.) を含む Hudson ジョブの新しいセットをセットアップし、一連のジョブの次をトリガーする各 hudson ジョブでリリースを行うことをお勧めします。すぐ。これは、バージョン管理にも個別のモジュールと個別の領域を持つための前提条件です。そうしないと、この戦いは Maven で失われ、人生が複雑になります。

于 2012-05-11T12:36:28.097 に答える