Apacheには2つの別個のツールがあります。
彼らは両方とも同じニッチを埋めているようです。2つの質問があります。
- 2つのツールの主な違いのハイライトは何ですか?
- 2つの違いについて、本当に長い記事を書くことができると私は確信しています。詳細については探していません。
- プログラミングの歴史-最終的に目的が非常に似ている2つの完全に独立したツールセットを作成するようにApacheが進化したのはなぜですか?
Apacheには2つの別個のツールがあります。
彼らは両方とも同じニッチを埋めているようです。2つの質問があります。
回答:
プロジェクトの構造
Mavenは特定のプロジェクト構造を好みます。TheMaven Wayを実行することにコミットする必要があります。Mavenには、pom.xml
通常他のすべてのプロジェクトによって継承されるルートですでに構成されている一般的なビルドステップが付属していますpom.xml
。
Ant + Ivyはよりオープンエンドです。多くのことを実行できますが、プロジェクトの構造やスクリプトの使用に関しては、いくつかの基本的な要件しかありません。事前に決められたビルドタスク、目標、プロセスはありません。それぞれbuild.xml
は白紙の状態です(もちろん、別のスクリプトを含めない限り)。
オリエンテーション
Mavenは目標指向です。「このビルドターゲットを実行する」と言うのではなく、「ビルド」または「デプロイ」するように要求すると、Mavenはそこに到達するために必要なことをすべて実行します。つまり、実行したいことを言います。
Ant + Ivyはタスク指向です。各タスクは実装定義であり、カスタムです。あなたはあなたが望むことをする方法をそれに伝えます。
依存関係管理
Mavenは依存関係を自動的に処理することで最もよく知られています。リポジトリのURLが事前に適切に構成されている限り、ユーザーの操作なしでビルド中に正しいバージョンがダウンロードされます。
Antには、「Javaクラスパス」以外の依存関係管理はありません。Ivyは、Mavenよりも少し面倒ですが、それでも自動化されている依存関係管理を追加します。ここで重要なのは、依存関係管理を選択しない(たとえば、「私のディストリビューションに含まれるjar」または「ソース管理にチェックインする」など)か、Ivyを介してアウトソーシングできるかです。この選択により、プロジェクトのニーズに柔軟に対応できます。
使いやすさ
Mavenは(理論的には)使いやすいです。開発者は誰でもMavenプロジェクトを選択して、すべてのプロジェクトリソースの場所とその目的をすぐに知ることができます。これは、Mavenが特定の方法で作業することの最初のポイントによるものです。
Ant + Ivyは、プロジェクトごとに異なるため、学習曲線が急になる場合があります。プロジェクトによって、同じ目標を達成する方法が異なる場合があります。
拡張性
Mavenでは、プラグインの作成とそのビルドプロセスの変更が可能です。ただし、pom.xml
開発者をあらかじめ決められたビルドプロセスに向かわせるルートを持つ、箱から出して使用します。新しい目標またはビルドステップでは、ビルドプロセスに注入するために慎重な検討と追加の労力が必要です。
Ant + Ivyは、プラグインと新しいタスクを書くこともできます。そうすることは非常に簡単で、最小限の労力で新しいタスクを統合できます。シャッフルしたり、新しいタスクを統合したりするための事前に決められた目標や目標はありません。
最初に理解する必要があるのは、Apacheプロジェクトは、独立した独立したプロジェクトが動作する傘にすぎません。さまざまなチームがさまざまなプロジェクトに取り組んでいます。個々の開発者は複数のプロジェクトで作業する場合がありますが、Ant、Ivy、およびMavenを組み込んだ全体的なロードマップはありません。
Antが最初に来ました。MakeのJava相当になるように設計されました。MakeはJavaプロジェクトを構築できますが、面倒です。一連のコンパイルユニットを個別にコンパイルしてリンクするMakeが存在しました。Javaの方法では、javac
すべてを一度にコンパイルします。「リンク」と呼ばれるものは、実行時にJVMの本質で実際に発生します。Makeはその仕事に適したツールではありませんでした。Java用のMakefileは基本的に1つまたは2つのターゲットです(javac
、jar
)。
AntはMakeの上に少し構造を追加しましたが、プロセスを根本的に変更しませんでした。
しばらくして、jarファイルを探すのは面白くないことにコミュニティは気づきました。さらに、プロジェクトを構成する標準的な方法はありませんでした。一貫性がなかったため、Java開発はめちゃくちゃでした。Mavenは、これらの問題を解決するために設計されました。これにより、共通のプロジェクト構造がもたらされ、jarファイルの検索が自動化されます。
ただし、Antはまだ本当に役に立ちました。一部のプロジェクトは、Antのプロセスのアドホックな性質により適しています。一部のプロジェクトはコードをコンパイルしていません。一部のプロジェクトは古く、誰もそれらをMavenに「アップグレード」することはありそうにありませんでした。
Ivyが登場します。Antに依存関係管理が追加され、プロジェクトに両方の世界で最高の機能を提供します。レガシースクリプトや高度にカスタマイズされた環境を維持しながら、Mavenの最も重要な機能である依存関係管理を利用できます。