web-dev-qa-db-ja.com

MavenのGitリポジトリを構築する最良の方法

Gitでプロジェクトを構成する方法についてアドバイスが必要です。私たちはJavaを使用し、Mavenはビルドツールです。Mavenは、すべてのプロジェクトに最終的に共通の祖先があると想定しています。Mavenは、設定されていない場合、実際のドラマの女王になることもできます正確に Apacheファウンデーションがプロジェクトをセットアップする方法(リリースプラグインを使用している誰もがおそらく私が話していることを知っています)。

プラグインのバージョンとビルド構成を制御する最上位の親pom(レポ構成、ビルドするアーティファクト、命名規則、プラグインバージョンなど)が必要です。 Mavenは、すべてのITプロジェクトがそのメインプロジェクトのサブフォルダーにあることを望みます。これは、組織にとって1つの大規模なGitリポジトリを意味します。

これは非常に騒々しい環境になります。無関係なプロジェクトに取り組んでいる2つのチームがある場合、彼らは常に他のチームからマージを引き込む必要があります。理想的には、プロジェクトごとに1つのリポジトリが欲しいです。

しかし、そのようなものは、Mavenの非常に階層的なモデルと衝突します。Mavenのdemandsサブプロジェクトはサブフォルダーになります。

人々がこれら2つのモデルをどのように調整したかについていくつかのアドバイスが必要です...ありがとうございます!

19

次の2つのオプションがあります。
1。 gitの方法:サブモジュールを使用します。これはgitがサブモジュールを管理する方法のドキュメントです git submodules 。個人的には使用していませんが、問題に合うようです。
2。 Mavenの方法:Mavenでは、ルートプロジェクト(構成)が階層的にすべてのプロジェクトの親ディレクトリである必要はありません。あなたはそのような構造を持つことができます:

configuration
 +-- pom.xml (configuration:XXX)
project1
 +-- pom.xml (project1:1.0-SNAPSHOT)
 !
 +-- module11 
 !     +-- pom.xml (1.0-SNAPSHOT)
 +-- module12
       +-- pom.xml (1.0-SNAPSHOT)
project2
 +-- pom.xml (project2:2.0-SNAPSHOT)
 !
 +-- module21 
 !     +-- pom.xml (2.0-SNAPSHOT)
 +-- module22
       +-- pom.xml (2.0-SNAPSHOT)

構成、project1とproject2は同じディレクトリレベルにあり、それぞれがgitリポジトリである可能性があります。 project1またはproject2をビルドするとき、mavenコマンドをproject1またはproject2レベルから実行すると、mavenは親(構成)を親ディレクトリからではなくmavenリポジトリーからフェッチしようとします。バージョンに注意する必要があります。私はproject1またはproject2で、リリースバージョンの親(構成)への参照を維持することをお勧めします。リリースを作成するには、2つの手順で行う必要があります。最初に構成をリリースし、次にプロジェクトをリリースします。 Project1とProject2は独立して展開でき、親と同じ構成バージョンである必要はありません。

構成とプロジェクトの両方をSNAPSHOTバージョンとして使用する特別な場合のために、project1またはproject2では<relativePath>タグ内<parent>タグを使用して、構成のローカルパスを指定します。開発環境で問題が発生するため、これはお勧めしません(少なくとも私にとってはEclipseの場合)。

英語をお詫び申し上げます。

20
catta

Mavenは、すべてのITプロジェクトがそのメインプロジェクトのサブフォルダーにあることを望みます。

いいえ、Mavenは必要なアーティファクトを取得できるようにしたいだけです。これを行う最良の方法は、 Nexus または Artifactory などのアーティファクトリポジトリを使用することです。各プロジェクトは独自のGitリポジトリを持つことができます。

プラグインバージョンとビルド構成を制御する最上位の親pom(レポ構成、ビルドするアーティファクト、命名規則、プラグインバージョンなど)が必要です

あなたの本当の問題があります。親POMを使用して構成を適用することは理にかなっていますが、構成をビルド制御と組み合わせる理由はありません。実際、スタンドアロンのマルチモジュールプロジェクトを除いて、あなたが述べる理由だけで(そして、すべてのプロジェクトをビルドする必要があるという事実のために)、それは非常に悪い考えだと思います時間)。

3
parsifal