最近、ビルドシステムとしてGradleを使い始めました。GradleがAntやMavenのようなものと最初に比較するのは、Antは命令型ビルドシステムであるのに対し、Mavenは宣言型ビルドシステムであるということです。Gradleは、Mavenによって強制される剛性のない宣言型ビルドシステムです。
ビルドシステムについて話すときは、これらの用語を宣言型および命令型としてよりよく理解したかったのです。
つまり、antスクリプトは、antツールに何をすべきかを指示します。「これらのファイルをコンパイルしてから、そのフォルダーにコピーします。次に、このフォルダーの内容を取得して、アーカイブを作成します。」
Mavenは、結果として必要なものをpom
宣言しますが、「プロジェクトが依存するライブラリの名前は次のとおりです。Webアーカイブを生成したいと思います」。Mavenは、ライブラリをフェッチする方法と、独自のソースクラスを見つける場所を知っています。
アリはあなたにもっと柔軟性を与えますが、それはまたあなたに常に車輪の再発明を強いることになります。
反対側のMavenは必要な構成が少なくて済みますが、特に別のワークフローに慣れている場合は、制約が大きすぎると感じる可能性があります。
編集: ant-maven比較の重要な側面は、mavenには、ファイルがどこにあるべきか、依存関係がどこにあるか、結果のアーティファクトをどこに置くかを説明する規則があるのに対し、antにはないということです。
つまり、バスに乗るようなMavenの使用を考えることができます。つまり、入る場所と出る場所を選択します。アリを使うことは車を運転するようなものです-あなたはそれを自分でしなければなりません。バスの運転手に何をすべきかを伝える必要はありませんが、停車地が行きたい場所から遠すぎる可能性があります。
EDIT2:「車輪の再発明」の比喩は私が思っていたほど明確ではないようです。これは私が意味することです:
賢明なデフォルト/規則がなければ、プロジェクトの構造とビルドのライフサイクルをプロジェクトごとに明示的に定義する必要があり、多くの場合、好みや意見の問題になります。チームや企業によって好みが異なるため、ビルドプロセスも異なります。これには、新しいプロジェクトメンバーとその後のメンテナのためのより多くの認知的努力が必要です。開発者の経験と専門知識によっては、最終的なソリューションを拡張して使用するのが難しい場合があります。
以下のコメントで述べたように、antビルドのベストプラクティスは存在しますが、ビルドのデフォルトになるのではなく、プロジェクトごとに実装するか、プロジェクトからプロジェクトにコピーして貼り付ける必要があります。ツール自体。
Mavenは、私の好みとのトレードオフの反対側に少し遠すぎます。デフォルトの変更は、そうあるべきであるほど簡単ではありません。