Gradle Versions Plugin のご紹介

井上です。

普段 Java でシステム開発を行っているのですが、ビルドツールとして最近は Gradleを使っています。

Gradle は 日本語のドキュメント「Gradle徹底入門 次世代ビルドツールによる自動化基盤の構築」 といった日本語の情報が豊富で、Java界隈におけるビルドツールのデファクトスタンダードとなりつつあります。

Gradle におけるライブラリのバージョンの指定方法

Gradle では、プロジェクトで使用するライブラリを指定することで、そのライブラリ及びライブラリが依存しているライブラリ群を自動的にダウンロードする機構が備わっています。

以下、Java を使ったプロジェクトで JUnit を使用する際のGradle のビルドスクリプト (build.gradle) の例です。

apply plugin: 'java'

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    // (1) 特定のバージョンを指定
    testCompile 'junit:junit:4.11'
    // (2) 動的バージョンで指定 (4系の最新版)
    // testCompile 'junit:junit:4.+'
    // (3) 使用できる最新版を表すプレースホルダで指定
    // testCompile 'junit:junit:latest.release'
}

通常は (1) のように、特定のバージョンを指定しますが、開発中など、常に最新版を使いたい場合は、 (2) (3) のように指定することもできます。

ただし、ライブラリが更新されたことは知りたいけども、実際に最新版を適用するかは、その更新内容を確認した後にしたい場合も多いと思います。

そのような場合、上記の指定方法だけでは対応することができないので、 (1) のように、特定のバージョンを指定した上で、Maven Central Repository などでライブラリの更新状況を都度チェックすることになりますが、とても面倒です。

このような場合に便利な Gradle Versions Plugin を紹介します。

Gradle Versions Plugin とは

Gradle Versions Plugin は、ビルドスクリプトに指定したライブラリの更新情報を一括で確認する機能を提供するGradleのプラグインです。

では、実際に Gradle Versions Plugin の使い方を簡単に見てみましょう。

Gradle Versions Plugin の使い方

以下が、先ほど紹介したビルドスクリプトに Gradle Versions Plugin の設定を追加した例です。

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.github.ben-manes:gradle-versions-plugin:0.11.3'
    }
}

apply plugin: 'java'
apply plugin: 'com.github.ben-manes.versions'

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    // (1) 特定のバージョンを指定
    testCompile 'junit:junit:4.11'
    // (2) 動的バージョンで指定 (4系の最新版)
    // testCompile 'junit:junit:4.+'
    // (3) 使用できる最新版を表すプレースホルダで指定
    // testCompile 'junit:junit:latest.release'
}

上記設定を追加することで、プロジェクトに dependencyUpdates タスクが追加されます

では、実際に dependencyUpdates タスクを実行してみましょう。
以下、dependencyUpdates タスク の実行例です。

% gradle dependencyUpdates                                                                                                                                                        (git)-[master]
:dependencyUpdates

------------------------------------------------------------
: Project Dependency Updates (report to plain text file)
------------------------------------------------------------

The following dependencies are using the latest milestone version:
 - com.github.ben-manes:gradle-versions-plugin:0.11.3

The following dependencies have later milestone versions:
 - junit:junit [4.11 -> 4.12]

Generated report file build/dependencyUpdates/report.txt

BUILD SUCCESSFUL

「Project Dependency Updates」以下に、ライブラリの更新情報が出力されています(標準出力だけでなく、build/dependencyUpdates/report.txt へも出力されています)。
出力内容から以下のことが分かります。

  • Gradle Versions Plugin (com.github.ben-manes:gradle-versions-plugin) は最新版 (0.11.3) を使用している
  • JUnit (junit:junit) は指定したバージョン (4.11) より新しいバージョン (4.12) が存在する

このように、dependencyUpdates タスクを実行するだけで、プロジェクトで使用するライブラリの更新情報を一括で取得することが出来ました。

また、dependencyUpdates タスクにオプションを指定することで、更新情報をreleaseバージョンに限定したり、出力フォーマットを xml や json にすることも可能です。
(詳細は ドキュメント を参照下さい)

gradle dependencyUpdates -Drevision=release -DoutputFormatter=json -DoutputDir=/any/path/with/permission

dependencyUpdates タスクを手動で実行するのが面倒な場合は、CI (継続的インテグレーション) で dependencyUpdates タスクの出力を解析し、更新情報があれば通知するといった運用も可能ですね。

まとめ

今回は、ライブラリの更新情報を一括で確認することができる Gradle Versions Plugin を紹介しました。
便利かつ簡単に導入することが出来るので、プロジェクトに導入してみてはいかがでしょうか?

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中