GradleはGroovyのDSLを利用してビルドスクリプトを記述することのできるビルドシステムである。Groovyを利用することでビルド手順を柔軟にカスタマイズできることが最大のメリット。
Mavenとの互換性があり、MavenのPOMやAntのタスクをそのまま利用することができる。
Gradleの特長は以下の通り。(http://www.monochromeroad.com/artifacts/gradle/userguide/overview.htmlより引用)
宣言的なビルドの記述と規約によるビルド
Gradleの重要な特長は、Groovyをベースにした拡張可能なドメイン特化言語(DSL) でビルドを記述できる点です。Gradleは、従来の宣言的なビルドの記述をさらに上の段階へ推し進めます。GradleのDSLで使用する言語要素は宣言的に使用できるだけでなく、組み合わせ方も柔軟です。また、JavaやGroovy、OSGi、WebそしてScalaなどのプロジェクトを一般的な方法に従ってビルドできるような言語要素も提供しています。さらに、これらの言語要素は拡張性豊富で、新しい言語要素を追加したり、既存のものを拡張したりすることもできます。 簡潔でメンテナンス性の良い、分かりやすいビルドを記述できるということです。
依存関係ベースのプログラミング
前述の宣言的な言語要素は、汎用のタスクグラフをベースにして成り立っていて、ビルドを記述するときにいつでも利用可能です。これにより、Gradleはさまざまな独自のビルドに適合できる大きな柔軟性を得ているのです。
ビルドの構造化
Gradleは柔軟性があり機能が豊富なので、ビルドを記述する際にプログラミングにおける一般的な設計の原則を適用できます。たとえば、ビルド用のロジックを利用可能な単位に細かく分割し、そのロジックを組み立ててビルドを構築することも簡単にできます。ロジックの呼び出しがむやみに複雑になってきたときはインライン化しましょう。同じプロジェクト階層に属しているなど、本来一カ所にあるべきロジックを、無理にいろんなところに書く必要もありません。変更が発散したり分岐したりして、ビルドのメンテナンスが悪夢に変わり果てるのを防ぎ、構造化されたメンテナンス性の良い分かりやすいビルドを記述できます。
ビルドの分割
Gradleでは、ビルドの分割を強力にサポートしています。このことは、単純なシングルプロジェクトでもエンタープライズレベルの巨大なマルチプロジェクトでも生産性の大きな向上につながります。ビルドを構造化できますし、最先端のインクリメンタルビルドで、たくさんの大きなプロジェクトをビルドするときのパフォーマンスを改善することもできるからです。
マルチプロジェクトのビルド
Gradleは突出したマルチプロジェクトのサポートが特長です。プロジェクト間の依存関係は Gradleのファーストクラス・オブジェクトであり、ごく普通に取り扱うことができます。世の中にはいろいろなビルドがありますが、Gradleではそれぞれのビルドに特有の問題点、課題にしたがってマルチプロジェクト、またプロジェクトの関係をモデリングできます。つまり、Gradleがあなたのプロジェクト構造に従うのであって、その逆ではありません。
Gradleでは部分ビルドが可能です。一つのサブプロジェクトをビルドすれば、Gradleはそのプロジェクトに依存しているすべてのプロジェクトもビルドします。また、依存しているプロジェクトのうち、どのプロジェクトを再ビルドするか選択することもできます。大きなプロジェクトの場合、これはインクリメンタルビルドと同様、大きな時間の節約になるでしょう。
依存関係を管理する多くの方法
外部ライブラリの解決には、チームごとにさまざまな方法があるものです。リモートのmavenやivyのリポジトリを使った推移的な依存関係の管理から、ローカルファイルシステム上のjarやディレクトリまで、どのような方法をとるにせよGradleはそれらを強力にサポートします。
他のビルドツールとの統合
Gradleでは、 Antのタスクはファーストクラス・オブジェクトです。さらにおもしろいことに、Antのプロジェクトもまたファーストクラス・オブジェクトなのです。 Gradleでは、Antプロジェクトをインポートして、実行時にAntのターゲットをGradleネイティブのタスクへ変換できます。もちろんインポートしたタスクへの依存関係を定義できますし、拡張もできます。それどころか、build.xmlの中でGradleのタスクへの依存関係を宣言することさえ可能です。プロパティやパス、その他諸々についても同じレベルで統合されています。
Gradle は、既存のMaven/Ivyリポジトリのインフラ、依存関係の定義や解決といった機能を完全にサポートしています。さらに、Mavenのpom.xml をGradleのスクリプトに変換するコンバーターも用意されています。実行時にその変換を行う機能も近いうちに提供される予定です。
容易に移行可能
Gradleは、どんな構造のプロジェクトにも適用できます。なので、今製品のビルドを行っているブランチがあるなら、それと同じブランチ上で平行してGradleのビルドを開発していくことができます。私たちは常より、成果物を作成するときには、いつもと同様のものができているか確認するようなテストを書くことを推奨していました。この方法で移行すれば、既存のものを破壊するような可能性は少ないし、可能な限りの安全性を確保できます。これは、小さな変更を積み重ねていくという、リファクタリング上のベストプラクティスなのです。
Groovy
GradleのビルドスクリプトはXMLではなくGroovyで記述します。しかし、それは単純に動的言語のスクリプト機能を生で使わせるということではありません。それではビルドのメンテナンスがむやみに難しくなるだけです。Gradleは、硬直したフレームワークとしてではなく、一つの言語として使用されることを想定してデザインされています。Groovyは、Gradle(またはあなた自身) が提供する抽象性と個々のビルドがもつ独自の筋書きとをくっつける接着剤となっているのです。Gradleでは、いくつかの標準的なビルドの筋書きを用意していますが、それら筋書きが何かの特別な扱いを受けているというわけではありません。別のビルドシステムと比較したとき、このことはGradleの主な特徴の一つになると考えています。GradleのGroovyサポートはただの構文糖衣では
ありません。すべてのAPIは完全にGroovy化されていて、楽にGroovyを使うことができ、生産性を向上させています。
Gradleラッパー
Gradleラッパーを使うと、Gradleをインストールしていないマシンでビルドを実行できます。たとえば、CIサーバー上でビルドしたり、オープンソースプロジェクトを簡単にビルドできるようにしたりするのに便利でしょう。このラッパーはエンタープライズ向けとしても非常に興味深いものです。これはつまり、クライアントマシンに対する「zero administration」のアプローチです。使用させるGradleのバージョンを固定し、サポートしなければならないような問題の発生を最小限にすることもできます。
フリーかつオープンソース
Gradleはオープンソースプロジェクトであり、ASLのもとで公開されています。