[java] なぜAntやMavenの代わりにGradleを使うのですか?


Answers

Gradleは多くの目的で使用できます - Antよりはるかに優れたスイス軍ナイフですが、特にマルチプロジェクトビルドに重点を置いています。

まず第一に、Gradleは依存性プログラミングツールであり、プログラミングツールでもあります。 Gradleを使用すると、セットアップで任意のタスクを実行することができ、Gradleは宣言されたすべての依存関係が適切かつ適時に実行されるようにします。 あなたのコードは、あらゆる種類のレイアウト(ツリー、フラット、散在、...)で多くのディレクトリに分散することができます。

Gradleには、評価と実行という2つの異なるフェーズがあります。 基本的に、評価の間、Gradleは見た目のディレクトリにあるビルドスクリプトを探して評価します。 実行中に、Gradleはタスクの相互依存関係を考慮して評価中にロードされたタスクを実行します。

これらの依存関係プログラミング機能の上に、GradleはApache Ivyとの統合によってプロジェクトとJARの依存関係の機能を追加します。 あなたが知っているように、Ivyは、Mavenというよりはるかに強力で、あまり意見のない依存管理ツールです。

Gradleは、プロジェクト間、プロジェクトとJAR間の依存関係を検出します。 Gradleは、iBiblioや自分のリポジトリのようなMavenリポジトリ(ダウンロードとアップロード)で動作しますが、サポートやその他の種類のリポジトリインフラストラクチャもあります。

マルチプロジェクトビルドでは、Gradleは両方とも適応可能であり、ビルドの構造とアーキテクチャに適応します。 Mavenで必要とされるように、構築ツールに構造やアーキテクチャを適応させる必要はありません。

Gradleはあなたのやり方で邪魔しないように努力しています。 コンベンションは良いですが、柔軟性も良いです。 Gradleは、Mavenよりも多くの機能を提供しますが、最も重要なことに、多くの場合、GradleはMavenから離れた痛みのない移行パスを提供します。

Question

Javaをターゲットにした別のツールを作成すると、実際に私を得ることができますか?

Gradleを別のツールに使用すると、なぜですか?




これは私の答えではありませんが、確かに私と共鳴します。 2012年10月のThoughtWorksのテクノロジーレーダーからのものです:

AntやMavenのようなXMLベースのビルドツールでは、怒っている括りがあまりにも多く、プラグインアーキテクチャの粗さが2つあります。 構文の問題は世代別に処理することができますが、プラグインのアーキテクチャは、プロジェクトが複雑になるにつれて、構築ツールが正常に成長することを厳しく制限します。 プラグインは間違った抽象レベルであり、GradleやRakeのような言語ベースのツールは、より細かい抽象性と長期的な柔軟性を提供するため、代わりに使用することをお勧めします。




Gradleは、AntとMavenの両方をうまく組み合わせ、両方のフレームワークから最高のものを得ます。 Mavenの設定、依存関係管理、プラグインに対するAntや慣例の柔軟性。

したがって、標準のJavaビルドをmavenのようにしたいのであれば、テストタスクはカスタムステップを実行する必要があります。

build.gradle:

apply plugin:'java'
task test{
  doFirst{
    ant.copy(toDir:'build/test-classes'){fileset dir:'src/test/extra-resources'}
  }
  doLast{
    ...
  }
}

さらに、groovy構文を使用することで、ant / mavenのxmlよりもはるかに多くの表現力が得られます。

これはAntのスーパーセットです.GreleのすべてのAntタスクをより良いグルーヴィーのような構文で使用することができます。

ant.copy(file:'a.txt', toDir:"xyz")

または

ant.with{
  delete "x.txt"
  mkdir "abc"
  copy file:"a.txt", toDir: "abc"
}



また、ネイティブビルドを管理する方がはるかに簡単です。 AntとMavenは実質的にJavaのみです。 一部のネイティブプロジェクトを処理しようとするMaven用のプラグインがありますが、効果的な仕事をしません。 Antタスクは、ネイティブプロジェクトをコンパイルするために記述することができますが、複雑すぎて扱いにくいものです。

私たちはJNIと他の多くのネイティブビットでJavaを実行します。 GradleはAntの面倒をかなり単純化しました。 私たちがネイティブプロジェクトに依存性管理を導入し始めたとき、それは面倒でした。 私たちはMavenにそれをさせることにしましたが、同等のGradleコードはMavenで必要とされたもののほんの一部であり、人々はMavenの指導者にならずにそれを読んで理解することができました。




Related