web-dev-qa-db-ja.com

なぜApacheにはビルドと依存関係管理のための2つの別個のツールがあるのですか?

Apacheには2つの別個のツールがあります。

それらは両方とも同じニッチを埋めているようです。 2つの質問があります:

  1. 2つのツールの主な違いのハイライトは何ですか?
    • 2つの違いについて、本当に長い記事を書くことができると私は確信しています。詳細については探していません。
  2. プログラミングの歴史-最終的に目的が非常に似ている2つの完全に別個のツールセットを作成するようにApacheが進化したのはなぜですか?
9
durron597

2つのツールの主な違いのハイライトは何ですか?

  • プロジェクトの構造

    • Mavenは特定のプロジェクト構造を好みます。TheMaven Wayを実行することにコミットする必要があります。 Mavenには、ルートpom.xmlで既に構成されている一般的なビルドステップが付属しています。これは通常、他のすべてのプロジェクトpom.xmlsによって継承されます。

    • Ant + Ivyはよりオープンエンドです。多くのことを実行できますが、プロジェクトの構造やスクリプトの使用に関しては、いくつかの基本的な要件しかありません。事前に決定されたビルドタスク、目標、またはプロセスはありません。各build.xmlは白紙の状態です(もちろん、別のスクリプトが含まれていない限り)。

  • オリエンテーション

    • Mavenはgoal指向です。 「このビルドターゲットを実行する」と言うのではなく、「ビルド」または「デプロイ」するように要求します。Mavenは、そこに到達するために必要なことをすべて実行します。つまり、whatと言います。

    • Ant + Ivyはタスク指向です。各タスクは実装定義であり、カスタムです。あなたはそれを言うどのようにあなたがやりたいことをする。

  • 依存関係管理

    • Mavenは、依存関係を自動的に処理することで最もよく知られています。リポジトリのURLが事前に適切に構成されている限り、ユーザーの操作なしでビルド中に正しいバージョンがダウンロードされます。

    • Antには、「Javaクラスパス」以外の依存関係管理はありません。 Ivyは、Mavenよりも少し面倒ですが、自動化された依存関係管理を追加します。ここで重要なのは、依存関係の管理を選択できないことです(たとえば、「私のディストリビューションに含まれている、またはソース管理にチェックインされているjarファイル」)。この選択により、プロジェクトのニーズに柔軟に対応できます。

  • 使いやすさ

    • Mavenは(理論的には)使いやすいです。開発者は誰でもMavenプロジェクトを選択して、すべてのプロジェクトリソースの場所とその目的をすぐに知ることができます。これは、Mavenが特定の方法で作業することの最初のポイントによるものです。

    • Ant + Ivyは、各プロジェクトcanが異なるため、学習曲線が急になる可能性があります。プロジェクトによって、同じ目標を達成する方法が異なる場合があります。

  • 拡張性

    • Mavenでは、プラグインの作成とビルドプロセスの変更が可能です。ただし、開発者を所定のビルドプロセスに向けてプッシュするルートpom.xmlが付属しています。新しい目標またはビルドステップでは、ビルドプロセスに注入するために慎重な検討と追加の労力が必要です。

    • Ant + Ivyはプラグインと新しいタスクを書くこともできます。そうすることはとても簡単で、最小限の労力で新しいタスクを統合することができます。シャッフルしたり、新しいタスクを統合したりするための事前に決定された目標や目標はありません。

Apacheが進化して、最終的に目的が非常に似ている2つの完全に別個のツールセットを作成したのはどうしてですか?

最初に理解する必要があるのは、Apacheプロジェクトが、独立した独立したプロジェクトが動作する傘にすぎないということです。さまざまなチームがさまざまなプロジェクトに取り組んでいます。個々の開発者は複数のプロジェクトに取り組むことができますが、Ant、Ivy、およびMavenを組み込んだ全体的なロードマップはありません。

Antが最初に来ました。 MakeはJava Makeに相当するように設計されています。MakeはJavaプロジェクトをビルドできますが、単調なコンパイルユニットをコンパイルするために存在しますJavaの方法はjavacですべてを一度にコンパイルし、「リンク」と呼ばれるものは実際には実行時にJVMの内臓で発生します。Makeはそうではありませんでした。ジョブに適したツール:JavaのMakefileは、基本的に1つまたは2つのターゲット(javacjar)です。

AntはMakeの上に少し構造を追加しましたが、プロセスを根本的に変更しませんでした。

しばらくすると、コミュニティはjarファイルを探すのは面白くないことに気づきました。さらに、プロジェクトを構成する標準的な方法はありませんでした。一貫性がないため、Java開発は混乱しました。Mavenはこれらの問題を解決するように設計されました。共通のプロジェクト構造をもたらし、jarファイルの検索を自動化します。

しかし、Antはまだ本当に役に立ちました。一部のプロジェクトは、Antのプロセスのアドホックな性質により適しています。一部のプロジェクトはコードをコンパイルしていません。一部のプロジェクトは古く、誰もがそれらをMavenに「アップグレード」することはありそうにありませんでした。

Ivyが登場します。Antに依存関係管理を追加し、プロジェクトに両方の長所を提供します。従来のスクリプトまたは高度にカスタマイズされた環境を維持できますが、Mavenの最も重要な機能である依存関係管理を利用できます。

7
user22815