1つのフォルダに複数のJavaプロジェクトがあります。また、プロジェクトからのビルド依存関係として使用される可能性のあるライブラリを含む2番目のフォルダーがあります。プロジェクトには、他のプロジェクトへの依存関係がある場合もあります。すべてのプロジェクトを構築するための最良のアプローチは何ですか?
つまり、依存関係を明示せずにプロジェクトを構築したいのですが、最大の問題はプロジェクト間の依存関係だと思います。
1つのフォルダに複数のJavaプロジェクトがあります。また、プロジェクトからのビルド依存関係として使用される可能性のあるライブラリを含む2番目のフォルダーがあります。プロジェクトには、他のプロジェクトへの依存関係がある場合もあります。すべてのプロジェクトを構築するための最良のアプローチは何ですか?
つまり、依存関係を明示せずにプロジェクトを構築したいのですが、最大の問題はプロジェクト間の依存関係だと思います。
使用できるビルドシステムは複数あります。Mavenには完全な依存関係システムが組み込まれています。ほとんどすべてのサードパーティのオープンソースjarは、WorldWideMavenリポジトリシステムを介して直接アクセスできます。基本的に、必要なjar(groupId、artifactId、およびversion)を記述すると、Mavenが自動的にそれをフェッチします。それだけでなく、Mavenはビルドファイルを作成せずにプロジェクトをビルドします。代わりに、プロジェクトをプロジェクトオブジェクトモデル(ファイル)で記述する必要があります。Mavenは、すべてのコンパイラなど、必要なものをすべてダウンロードします。pom.xml
ほとんどすべての新しいプロジェクトはMavenを使用しますが、Mavenにはいくつかの欠点があります。
src/main/java
JUnitテストが下にある間、ソースファイルは下にあるはずsrc/test/java
です。推奨されるレイアウトに従う必要はありませんがpom.xml
、ビルドを機能させるには、この方法でファイルを変更する必要があります。それはそもそもpom.xmlの目的全体を打ち負かします。もう1つはAntwithIvyと呼ばれます。IvyはビルドにAntを使用しますが、サードパーティの依存関係のためにMavenのワールドワイドリポジトリシステムにアクセスできます。すでにAntに多額の投資をしている場合、これは大きな妥協点です。また、Ant with Ivyは、Mavenよりも文書化されていることがわかります(ただし、それほど難しくはありません)。ManningPublicationのAntinActionには、Ivyの基本について説明した優れた章があります。
どちらのプロセスでも、 NexusまたはArtifactoryのいずれかを使用して全社的なMavenリポジトリを構築することをお勧めします。このように、独自のサードパーティjar(Oracle jarなど)は、標準のWorld Wide Mavenリポジトリにはないため、会社全体のMavenリポジトリに格納することもできます。
ちなみに、これが全社的な取り組みであり、複数のAntプロジェクトをIvyに移動する場合は、Githubで使用するIvyプロジェクトがあります。これにより作業が簡単になります。
ああ、私が何も知らないGradleと呼ばれる3番目の可能性があります。また、WorldWideMavenリポジトリーを使用できると思います。これは、Java構文に基づくGroovyに基づいており、私が言えることはそれだけです。たぶん他の人があなたに詳細を記入することができます。Gradleグループは、Ant/IvyとMavenの両方の多くの問題を解決すると主張しています。
どのツールを使用する場合でも、さまざまなプロジェクトが相互に依存している場合は、依存プロジェクトを構築する前に、最初に構築される独立プロジェクトを明確にする必要があります。プロジェクトには明確な依存関係構造が必要です。
これはApacheIvyで行うことができます。共通ライブラリの場所をレイアウトし、各プロジェクトのivy.xmlドキュメントで公開されたアーティファクトと相互依存関係を定義し、Ivyタスクを使用してトップレベルのAntビルドに、ビルド順序が何に基づくべきかを判断させることができます。それらの依存関係。