web-dev-qa-db-ja.com

Gitを使用したマルチモジュールMavenプロジェクトのリリース

SCMとしてgitを使用するマルチモジュールmavenプロジェクトをリリースしようとしています。最初に遭遇した問題の1つは、mavenリリースプラグインがrelease.properties scm.urlをビルドする方法です。私の親POMは次のようになります。

<packaging>pom</packaging>
<groupId>org.project</groupId>
<artifactId>project-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>

<scm>
    <connection>scm:git:git://github.com/username/project.git</connection>
    <developerConnection>scm:git:[email protected]:username/project.git</developerConnection>
    <url>http://github.com/username/project</url>
</scm>

<modules>
    <module>api</module>
    <module>spi</module>
</modules>

また、モジュールのPOMは単純です。

<parent>
    <groupId>org.project</groupId>
    <artifactId>project-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>api</artifactId>
<version>0.2.2</version>

私の目標は、モジュールごとに異なるバージョンがあり、リリースするたびにすべてのバージョンを一緒に増分したくないので、個々のモジュールをリリースできるようにすることです。

apiディレクトリに移動してmvn release:clean release:prepare次の出力が表示されます。

[INFO] Executing: cmd.exe /X /C "git Push [email protected]:username/project.git/api master:master"
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Unable to commit files
Provider message:
The git-Push command failed.
Command output:
ERROR: Repository not found.

MavenリリースプラグインがdeveloperConnectionにモジュール名を追加することでscm.urlを作成するようですが、これはgithubで有効なリポジトリではなくなります。これを設定する正しい方法が何であるかはわかりません。 Maven + git +で個々の子モジュールを解放するだけではうまくいかない場合がありますか?任意の入力を歓迎します。

30
Josh Stone

これを機能させる方法を確認するには、次のような実用的な例をご覧ください。

https://github.com/sonatype/sonatype-aether

ただし、個々のピースをリリースする場合は、これは役に立ちません。その場合、<scm>要素をすべてのpomにコピーする必要があります。

これは、maven devリストで活発に議論されているトピックですが、そこからの解決策に一息ついてはいけません。それは大きな問題です。

14
bmargulies

「git-Pushコマンドが失敗しました」という検索でこの質問を見つけました。同様の構成で、master-pomと、独自のmavenパッケージとしてリリースするサブモジュールがあります。

これを機能させるには、pom.xmlscmセクションを次のように調整する必要がありました。特に、接続は正しく機能するように調整する必要がありました。 githubのどれもまったく機能しませんでした。

<scm>
    <url>https://github.com/XXX/YYY</url>
    <connection>scm:git:ssh://[email protected]/XXX/YYY.git</connection>
    <developerConnection>scm:git:ssh://[email protected]/XXX/YYY.git</developerConnection>
</scm>

上記の例のXXXはgithubユーザー名です。 :XXXを過ぎた値はポート番号として解釈されるため、[email protected]:XXX/...形式(:)は使用できません。 YYYは明らかにXXXアカウントでのリポジトリ名です。

このパターンを使用して、3つすべてのサブモジュールを1つずつリリースしました。

12
Gray

私は長い間同様のことをしようとしていましたが、良い解決策を見つけることができなかったので、git用の独自のリリースプラグインを作成しました。変更されたモジュールのみをリリースし、scm設定は必要ありません。モジュール名に基づいてタグが付けられ、コンポーネント間の依存関係が機能します。

ドキュメント: http://danielflower.github.io/multi-module-maven-release-plugin/index.html

紹介ブログ: http://danielflower.github.io/2015/03/08/The-Multi-Module-Maven-Release-Plugin-for-Git.html

2
Daniel Flower

簡単な方法ですが、私にとってうまくいったのは、モジュールで親プロパティを使用することですpom.xml like follow scmタグのfollow followのように:

<!--module pom.xml-->
<scm>
    <connection>${project.parent.scm.connection}</connection>
    <developerConnection>${project.parent.scm.developerConnection}</developerConnection>
</scm>
1
toschneck

私がしたように良い解決策を求めてこの質問に来る誰にとっても、私にとってうまくいくことが次のようにわかりました:

http://blog.avisi.nl/2012/02/15/maven-release-plugin-setup-guide-for-git/

それでもgitが機能するため、トランク全体にタグを付けますが、必要なサブモジュールのみをビルド/バージョン/デプロイすることができます。

1
Wysawyg

私はこれが返答が遅いことを知っていますが、私はこれと同じ問題に遭遇し、マルチモジュールmavenプロジェクトと各モジュールの独立したリリースの両方を達成できる唯一の解決策は、次のことです:

  1. Mavenマルチモジュールプロジェクトのセットアップでは、GITプロジェクト
  2. (1)の各Mavenモジュールについて、(1)にGITサブモジュールを追加します
  3. 各GITサブモジュール(2)を独自のGITプロジェクトにリンクする

基本的に、git内では、各mavenモジュールが独自のプロジェクトとして存在します。 Maven親プロジェクト用の個別のgitプロジェクトがありますが、実際のモジュールは含まれず、実際のプロジェクトが保存されているgitの場所へのリンクはgitサブモジュールのみです。

0
sshekhar1980

私は関連する質問に答えました here(multi-module with multi-repository) 。基本的に、commitByProjectと呼ばれるプロパティを使用できます。maven-release-plugin2.0-beta-5により、プロジェクトごとに各サブモジュールをコミットできるようになります(「git submodule add」戦略でルートpomから参照することもできます)。

mvn release:prepare -DcommitByProject=true
0
le0diaz