2012-11-14 4 views
8

ネストされたGitサブモジュールを使用しているとき、Mavenモジュールをリリースするための解決策やガイド/チュートリアルが見つかりませんでした。ネストされたGitサブモジュールを使用して複数のMavenアーチファクトを解放する

ビルドには特定の順序が必要な公開プロジェクトと非公開プロジェクトの複雑な構造があります。私たちの目標は、複数のMavenアーティファクトを一度にタグ付けして展開するために、Mavenリリースを実行することです。ここで

が簡略化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を放出maven-release-plugin行うウェル(Gitのリポジトリがタグ付けされたアーティファクトを解放された展開されています)。

parent-privateを解放

maven-release-pluginは準備し ターゲットチェックアウト時に失敗する前に、リリースの実行を開始(この問題は hereを議論しているが、解決策はコメントするのに十分な評判を私のコンテキストで作業していないされていません)。ここで

は現在maven-release-plugin構成です:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-release-plugin</artifactId> 
    <version>2.3.2</version> 
    <configuration> 
     <tagNameFormat>[email protected]{project.version}</tagNameFormat> 
     <commitByProject>true</commitByProject> 
     <pushChanges>true</pushChanges> 
    </configuration> 
</plugin> 

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

+0

ではないことも事実であるマルチモジュールビルドをサブモジュールの代わりに単一のGitリポジトリに配置する必要があります。さらに、マルチモジュールビルドを使用すると、モジュール全体をワンステップで簡単に展開/解放することができます。 ? – khmarbaise

+0

@khmarbaise:あなたのコメントをいただきありがとうございます。私たちは、複数のMavenモジュールを備えた単一のGitリポジトリに移動することを決定しましたので、私たちのプロジェクト構造に_simple_ソリューションが見つかりませんでした。 – almeidap

+1

IMHOは本当に良い選択肢ではありません。リリース中のステップで_tag_が作成され、thこのタグからコードを復元すると、このリリースのすべてのコードが私に与えられます。しかし、GITサブモジュールでは、サブモジュールを最初のモジュールとして簡単に見ることができるため、ユーザーがそのタグからすべてを取得できるようにする方法はありません。 –

答えて

5

この質問に対する答えは初期の質問を満足させるものではありませんが、Maven Releaseプラグインはgit submoduleの境界を理解するのに十分スマートではありません。あなたが探しているのは、Maven Releaseプラグインがディレクトリがサブモジュールを指していることを検知し、このリリースのプラグインが自動的に境界を越えてタグ付けすることができることです。これは起こりません、そして、私はそれが今のところ誰の計画にもないと思います。

Gitを使用するMavenユーザには常に、サブモジュール間でリリースプラグインを使用する必要があるマルチモジュールプロジェクトの境界が崩れることはありません。それを1つのリポジトリに限定してください。

繰り返しますが、これは偉大な答えはありませんが、長年にわたってMavenのリリースプラグインを使用した、Mavenのように聞こえる偉大なプラグイン:-(