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 +で個々の子モジュールを解放するだけではうまくいかない場合がありますか?任意の入力を歓迎します。
これを機能させる方法を確認するには、次のような実用的な例をご覧ください。
https://github.com/sonatype/sonatype-aether
ただし、個々のピースをリリースする場合は、これは役に立ちません。その場合、<scm>要素をすべてのpomにコピーする必要があります。
これは、maven devリストで活発に議論されているトピックですが、そこからの解決策に一息ついてはいけません。それは大きな問題です。
「git-Pushコマンドが失敗しました」という検索でこの質問を見つけました。同様の構成で、master-pomと、独自のmavenパッケージとしてリリースするサブモジュールがあります。
これを機能させるには、pom.xml
のscm
セクションを次のように調整する必要がありました。特に、接続は正しく機能するように調整する必要がありました。 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つずつリリースしました。
私は長い間同様のことをしようとしていましたが、良い解決策を見つけることができなかったので、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
簡単な方法ですが、私にとってうまくいったのは、モジュールで親プロパティを使用することですpom.xml
like follow scm
タグのfollow followのように:
<!--module pom.xml-->
<scm>
<connection>${project.parent.scm.connection}</connection>
<developerConnection>${project.parent.scm.developerConnection}</developerConnection>
</scm>
私がしたように良い解決策を求めてこの質問に来る誰にとっても、私にとってうまくいくことが次のようにわかりました:
http://blog.avisi.nl/2012/02/15/maven-release-plugin-setup-guide-for-git/
それでもgitが機能するため、トランク全体にタグを付けますが、必要なサブモジュールのみをビルド/バージョン/デプロイすることができます。
私はこれが返答が遅いことを知っていますが、私はこれと同じ問題に遭遇し、マルチモジュールmavenプロジェクトと各モジュールの独立したリリースの両方を達成できる唯一の解決策は、次のことです:
基本的に、git内では、各mavenモジュールが独自のプロジェクトとして存在します。 Maven親プロジェクト用の個別のgitプロジェクトがありますが、実際のモジュールは含まれず、実際のプロジェクトが保存されているgitの場所へのリンクはgitサブモジュールのみです。
私は関連する質問に答えました here(multi-module with multi-repository) 。基本的に、commitByProjectと呼ばれるプロパティを使用できます。maven-release-plugin2.0-beta-5により、プロジェクトごとに各サブモジュールをコミットできるようになります(「git submodule add」戦略でルートpomから参照することもできます)。
mvn release:prepare -DcommitByProject=true