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


19

Gitでプロジェクトを構成する方法について、いくつかのアドバイスが必要です。Javaを使用し、Mavenはビルドツールです。Mavenは、最終的にすべてのプロジェクトに共通の祖先があると想定しています。Mavenは、Apache Foundationがプロジェクトをセットアップする方法が正確にセットアップされていない場合、本当のドラマクイーンになることもあります(リリースプラグインを使用している人は、おそらく私が話していることを知っています)。

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

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

しかし、そのような種類は、サブプロジェクトがサブフォルダーであることを要求する Mavenの非常に階層的なモデルと衝突します。

人々がこれら2つのモデルをどのように調整したかについて、いくつかのアドバイスが必要です。


2
gitサブモジュール?git-scm.com/book/en/Git-Tools-Submodules
lwm

回答:


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をビルドするとき、project1またはproject2レベルからmavenコマンドを実行すると、mavenは親ディレクトリからではなく、mavenリポジトリから親(構成)を取得しようとします。バージョンに注意する必要があります。project1またはproject2では、リリースバージョンの親(構成)への参照を保持することをお勧めします。リリースを作成するには、2つの手順で行う必要があります。最初に構成をリリースし、次にプロジェクトをリリースします。Project1とproject2は独立して進化でき、親と同じ構成バージョンを持つ必要はありません。

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

私は私の英語をおpoびします。


3

Mavenは、すべてのITプロジェクトをメインプロジェクトのサブフォルダーに入れたい

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

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

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


私はmavenがどのように機能するかをよく知っています。いいえ、私のチームがコードベース全体を構築することは望ましくありません。通常、少数のプロジェクトを選択し、ソース管理からそれらを引き出します。完成したアーティファクトをホストするnexusサーバーがあるため、コードベース全体を構築する理由はありません。そして、組織が一定の規模になると、共有インフラストラクチャで実行することで費用を節約できます。それを行うための中央構成を持つことは、毎回それを機能させるための唯一の方法です。
ジョナサンS.フィッシャー

親愛なる@parsifalは、java多層アプリケーションの作成についての私の質問で視力を持ってくださいstackoverflow.com/questions/49562268/...を
Hosein Aqajani
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.