2013-02-19 7 views
29

最近、Gradleをビルドシステムとして使用し始めました。 Gradleのは、AntとMavenのの同類となす 彼ら最初の比較は、Mavenのは、、宣言ビルドシステムであるのに対し、 Antは不可欠ビルドシステムは、ということです。 Gradleは宣言的なビルドシステムであり、Mavenによって強制されることはありません。 命令型ビルドシステムと宣言型ビルドシステム

は、私はこれらの用語 、宣言と不可欠それがビルドシステムの話になると、より良い を理解したかったです。

答えて

41

つまり、antスクリプトは、antツールに何をするかを伝えます。 - "これらのファイルをコンパイルし、そのフォルダにコピーしてから、このフォルダの内容を取り出してアーカイブを作成します。

のmaven pomは、我々は結果として持っていたいものを宣言していますが - 「ここにプロジェクトが依存ライブラリの名前であり、我々はWebアーカイブを生成したいと思います」。 Mavenはライブラリのフェッチ方法とソースクラスをどこに見つけるかを知っています。

antはあなたに柔軟性を与えてくれますが、ホイールを常に再開発しなければなりません。

反対側のMavenは設定が少なくて済みますが、特に別のワークフローに慣れている場合は、制約がかかる可能性があります。

EDIT: ANT-mavenの比較の重要な側面は、アリがそうではないのMavenは、依存関係がどこたアーティファクトを置くために、発見された大会、ファイルがあるべき場所、記述を持っているということです。

あなたはバスに乗るのと同じようにmavenを使うと考えることができます。あなたが入る場所と出る場所を選択します。アリを使用することは車を運転するようなものです - あなたはそれを自分で行う必要があります。あなたはバスドライバーに何をすべきかを伝える必要はありませんが、停留所は行きたいところから遠すぎるかもしれません。

EDIT2:「ホイールのメタファーを再活性化することは、私が望んでいたよりもあまり明確ではないようです。

わかりやすいデフォルト/表記規則がない場合、プロジェクトごとに明示的にプロジェクト構造とビルドライフサイクルを定義する必要があります。しばしば、それを趣味や意見の対象にします。チームや企業によって環境設定が異なるため、ビルドプロセスも同様です。これには、新しいプロジェクトメンバーや後のメンテナーにとってより多くの認知的努力が必要です。開発者の経験と専門知識に応じて、最終的な解決策は拡張して使用するのが難しいかもしれません。

以下のコメントで述べたように、アリビルドのベストプラクティスは存在しますが、それでも各プロジェクトごとに実装する必要があります。また、プロジェクトからプロジェクトにコピーする必要があります。ビルドツール自体のデフォルト。

私の好みのトレードオフの反対側では、Mavenは少し遠すぎます。デフォルトを変更するのは簡単ではありません。

+0

私はAntで作業していませんが、そのようなものはすでに正しく解決されているはずですか?Antのプラグインのいくつかのように、より多くのプロジェクトで同じことがありますか? –

+1

@AnkitDhingra私は、Antでよく練習するのは、前回動作した設定をコピー・ペーストすることです:ベスト・プラクティスはありますが、それでも実装する必要があります。編集 – kostja

+0

@AnkitDhingraを参照してください。ホイールを再発明するのは本当に好きではありません。 – kostja