10

私はしばらく探していましたが、ネストされた Git サブモジュールを使用するときに Maven モジュールをリリースするための実用的なソリューションやガイド/チュートリアルを見つけることができませんでした。

私たちは、ビルドを成功させるために特定の順序を必要とするパブリックおよびプライベート プロジェクトの複雑な構造を持っています。私たちの目標は、Maven リリースを実行して、複数の Maven アーティファクトを 1 つのステップでタグ付けしてデプロイすることです。

簡略化された Maven プロジェクト/モジュールと Git リポジトリ構造は次のとおりです。

parent-public:1.0.0:pom (descriptor only, no Maven modules, public Git repository)
  |  |
  |  |- public-module:1.0.0-SNAPSHOT:jar
  |     (Maven module, child of parent-public, Git submodule, public repository)
  |
  |- parent-private:1.0.0-SNAPSHOT:pom
    (Maven modules, Git submodule, private repository)
       |
       |- public-module:1.0.0-SNAPSHOT:jar
       |  (Maven module only, child of parent-public, Git submodule, public repository, released)
       |
       |- private-module:1.0.0-SNAPSHOT:war
          (Maven module, child of parent-private, released)

現在の構造により、Maven はプロジェクト/モジュールを個別にビルドおよびデプロイできます。

public-module( parent-public/parent-private/public-moduleディレクトリから)リリースする場合、maven-release-pluginは適切に機能します (Git リポジトリがタグ付けされ、リリース アーティファクトがデプロイされています)。

をリリースすると、ターゲットparent-privateのチェックアウト中に失敗する前に、リリースのmaven-release-plugin準備と実行が開始されます(この問題についてはここで説明されていますが、私のコンテキストでは解決策が機能しておらず、コメントするのに十分な評判がありません)。

現在のmaven-release-plugin構成は次のとおりです。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <tagNameFormat>v@{project.version}</tagNameFormat>
        <commitByProject>true</commitByProject>
        <pushChanges>true</pushChanges>
    </configuration>
</plugin>

複数の Maven アーティファクトをリリースするために、Maven モジュールと Git リポジトリを整理するよりエレガントな方法はありますか? あるいは、アーティファクトをデプロイする直前のチェックアウト中に Git サブモジュールを再帰的に複製するソリューションを誰かが見つけましたか?

4

1 に答える 1

5

この質問に対する答えは最初の質問を満たすものではありませんが、Maven リリース プラグインは git サブモジュールの境界を理解できるほどスマートではありません。あなたが探しているのは、ディレクトリがサブモジュールを指していることをMavenリリースプラグインが感知し、このリリースプラグインが境界を越えて自動的にタグ付けする機能だと思いますか? これは起こらないでしょうし、現時点では誰の計画にもないと思います.

Git を使用する Maven ユーザーに常にお勧めすることは、サブモジュール間で Release プラグインを使用する必要があるマルチモジュール プロジェクトの境界を壊さないことです。単一のリポジトリに限定してください。

繰り返しますが、これは素晴らしい答えではありませんが、Maven Release Plugin を長年使用してきたので、それが優れたプラグインではないことも事実です :-(

于 2012-12-26T18:54:46.130 に答える