Gradleで依存関係を管理

メモ:

自作ライブラリやベンダー提供ライブラリなど様々なライブラリを使用してアプリケーションを構築する場合、ライブラリ間の依存関係をどのように管理するか?

気になっていた部分の1つを解決!

外部依存関係

Gradleで依存関係を定義するには、build.gradleファイルに次のように記述します。

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.google.guava:guava:18.0'
}

この例では、googleのguavaライブラリを使用したプロジェクトを想定しています。そこで、 dependencies の定義としてコンパイルに必要なライブラリ guava を定義しています。

ライブラリの取得先は、repositoriesの部分で定義しMaven Central Repositoryを指定しています。

依存関係コンフィグレーション

Javaプラグインには、いくつかの標準コンフィグレーション(依存関係の集まり)が用意されており、その一つが compile になります。この compile には、プロジェクトをコンパイルするのに必要な依存関係を定義します。

この標準コンフィグレーションには、次のようなものがあります。

種類 説明
compile プロジェクトのコードをコンパイルするのに必要な依存関係。
runtime クラスを実行する時に必要な依存関係。デフォルトで「compile」で定義したものが含まれる。
testCompile ロジェクトのテストコードをコンパイルするのに必要な依存関係。
testRuntime テストを実行する時に必要な依存関係。デフォルトで「compile」,「runtime」,「testCompile」で定義したものが含まれる。

コンフィグレーション(例えば、compile)に続く外部依存関係の定義は、group属性,name属性,version属性のセットとなります。 リポジトリの種類によっては、group属性とversion属性はオプショナルになるようです。

上記例での外部依存関係の定義は、短縮形で書かれており次のように記述することもできます。

dependencies {
    compile group:'com.google.guava',name:'guava',version:'18.0'
}

ここでは、外部の依存関係を見てきましたが、依存関係には他にも次のような種類があります。

種類 説明
外部モジュール依存 どこかのリポジトリにある外部モジュールへの依存関係
プロジェクト依存関係 同じビルドに含まれる別プロジェクトへの依存関係
ファイル依存関係 ローカルファイルシステム上のファイル群への依存関係
クライアントモジュール依存関係 どこかのリポジトリにあるアーティファクトへ依存しているが、そのモジュールのメタデータは手元のビルドで定義する際に使用する。この依存関係を使うと、モジュールのもともとのメタデータを上書きすることができる。
Gradle APIへの依存関係 現在使用しているバージョンのGradleが持つAPIへの依存関係。Gradleのカスタムプラグインやカスタムタスクを開発するときにこの種類の依存関係を使用します。
ローカルGroovy依存関係 現在使用中のGradleで使われているGroovyへの依存関係。これもGradleのカスタムプラグインやカスタムタスクを作る際に使用します。