前面几篇学んだ Gradle 構築タスクの基礎知識、Project と Task という 2 つの概念を理解しました。前の数記事を先に読むことをお勧めします:
Gradle には多くの一般的なプラグインが組み込まれており、Gradle のプラグインは特定のシーンで私たちの開発効率を向上させるのに役立ちます。既存のプラグインを拡張することで、より多くの機能を実現できます。たとえば、Android Gradle プラグインは組み込みの Java プラグインに基づいて実装されています。
- プラグインの役割
- プラグインの適用方法
- カスタムプラグイン
プラグインの役割#
まず、Gradle プラグインの役割について説明します。主に以下のいくつかの側面があります:
- プロジェクトにタスクを追加し、プロジェクトをテスト、コンパイル、パッケージ化できます。
- プロジェクトに依存関係を追加し、プロジェクト構築プロセスで必要な依存関係を構成できます。
- プロジェクトの既存のオブジェクトタイプに新しい拡張プロパティ、メソッドなどを追加でき、プロジェクトの構成や構築の最適化が容易になります。たとえば、Android プロジェクト構築の android {} は Android Gradle プラグインが Project オブジェクトに追加した拡張です。
- プロジェクトにいくつかの規約を適用できます。たとえば、Java Gradle プラグインを使用すると、src/main/java ディレクトリにソースコードを配置する場所を規定でき、コンパイル時に指定されたディレクトリ内の Java ソースコードファイルをコンパイルできます。
プラグインの適用方法#
プラグインを使用する前に、Project の apply メソッドを使用してそのプラグインを適用する必要があります。プラグインはバイナリプラグインとスクリプトプラグインに分かれます。
バイナリプラグインの使用#
バイナリプラグインは org.gradle.api.Plugin インターフェースを実装したプラグインであり、各 Java Gradle プラグインにはプラグイン ID があります。次のようにして Java プラグインを使用できます:
apply plugin : 'java'
上記のコードにより、Java プラグインがプロジェクトに適用されます。ここで java は Java プラグインのプラグイン ID です。Gradle に付属のコアプラグインにはすべて一意のプラグイン ID があり、ここでの java に対応する具体的なタイプは org.gradle.api.plugins.JavaPlugin です。したがって、次のように Java プラグインを使用できます:
apply.plugin:org.gradle.api.plugins.JavaPlugin
//org.gradle.api.pluginsはデフォルトでインポートされます
apply.plugin:JavaPlugin
バイナリプラグインは一般的に Jar にパッケージ化されて公開されます。カスタムプラグインを作成する際には、プラグインのプラグイン ID を指定する必要があります。このプラグイン ID は一意でなければならず、アプリケーションパッケージ名を使用してプラグイン ID の一意性を保証できます。
スクリプトプラグインの使用#
スクリプトプラグインの使用は、実際には特定のスクリプトファイルの使用です。スクリプトプラグインを使用する際は、スクリプトを読み込むだけで済みます。スクリプトプラグインを使用するには、キーワード from を使用する必要があります。後ろのスクリプトファイルはローカルのものでもネットワーク上のものでもかまいません。以下にスクリプトを定義し、build.gradle ファイルで使用します。具体的には次のようになります:
//version.gradleファイル
ext{
versionName = "1.0"
versionCode = 1
}
次に、このスクリプトファイルを構築ファイルで使用します。具体的には次のようになります:
//build.gradleファイル
apply from: 'version.gradle'
task taskVersion{
doLast{
println "バージョンは${versionName},バージョン番号は${versionCode}"
}
}
上記のコードの実行結果は次のとおりです:
PS E:\Gradle\study\GradlePlugin> gradle taskVersion
> Task :taskVersion
バージョンは1.0,バージョン番号は1
BUILD SUCCESSFUL in 2s
1 actionable task: 1 executed
明らかに、apply from を使用してプラグインスクリプトを参照しました。スクリプトプラグインの使用により、構築に使用するスクリプトファイルを段階的に整理できます。スクリプトファイルを明確な責任を持つ単一のスクリプトファイルに分離し、apply from キーワードを使用してこれらのスクリプトファイルを直接使用できます。たとえば、特定のツール性のメソッドや各依存関係のバージョン番号をそれぞれ単一の gradle ファイルに定義し、各依存関係のバージョン番号を統一して呼び出し、管理しやすくします。
apply メソッドの使い方#
Project.apply () は 3 つの異なる引数を受け取ることができます。具体的には次のとおりです:
//クロージャを引数として
void apply(Closure closure);
//ObjectConfigurationActionを構成する
void apply(Action<? super ObjectConfigurationAction> action);
//Mapを引数として
void apply(Map<String, ?> options);
上記の 3 つの方法を使用してプラグインを構成できます。3 つの方法の書き方は次のとおりです:
//Mapを引数として
apply plugin:'java'
//クロージャを引数として
apply{
plugin 'java'
}
//ObjectConfigurationActionを構成する
apply(new Action<ObjectConfigurationAction>() {
@Override
void execute(ObjectConfigurationAction objectConfigurationAction) {
objectConfigurationAction.plugin('java')
}
})
サードパーティが公開したプラグインの使用#
ほとんどの場合、プロジェクトを構築するためにサードパーティのプラグインが必要です。使用する際は、buildscript {} 内で classpath を構成する必要があります。たとえば、Android Gradle プラグインを使用する際は、build.gradle {} 内で対応する classpath を構成する必要があります。コードは次のようになります:
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
}
}
buildscript {} ブロックは、プロジェクト構築の前にプロジェクト構築に関連する依存関係を構成するためのものです。これらの依存関係を構成したら、次のようにしてプラグインを使用できます:
//使用する際は必ずbuildscript{}内で相応のclasspathを構成する必要があります
apply plugin: 'com.android.application'
plugins DSL を使用してプラグインを適用する#
plugins DSL は新しいプラグインの適用方法であり、この方法は Gradle 2.1 以上でのみ使用できます。使用方法は次のようになります:
//plugins DSL 方式
plugins{
id 'java'
}
//サードパーティのプラグインが https://plugins.gradle.org/ にホストされている場合、
//buildscript に classpath を構成する必要はありません
plugins{
id "プラグインID" version 'プラグインバージョン'
}
プラグインの使用についてはここまでです。
カスタムプラグイン#
ほとんどの場合、プロジェクトの構築操作を完了するためにカスタムプラグインが必要です。カスタムプラグインは Plugin インターフェースを実装する必要があり、インターフェース内の apply メソッドはプラグインが適用されるときに実行されます。このメソッド内で関連する操作を実行できます。以下に Android Studio を使用して簡単なプラグインの開発を行います。このプラグインの役割はタスクを作成することです。ここでは主に Android Studio を利用して Groovy プロジェクトを作成し、関連するコードの開発を行います。
Android Studio でモジュールを作成し、src/main、build.gradle 以外のファイルを削除します。その後、.groovy ファイルを作成して Plugin インターフェースを実装します。ファイル内容は次のとおりです:
package com.manu.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
/**
* カスタムプラグイン
*/
class MPlugin implements Plugin<Project>{
@Override
void apply(Project target) {
target.task('taskPlugin') {
doLast {
println "カスタムプラグインがタスクを作成しました"
}
}
}
}
次に、このプラグインのプラグイン ID を指定し、src/main の下に resources/META-INF/gradle-plugins ディレクトリを作成します。その後、プラグイン ID を持つプロパティファイルを作成します。ファイル内容は次のとおりです:
//プラグインの具体的な実装クラスを指定
implementation-class=com.manu.plugin.MPlugin
次に、build.gradle ファイルの対応する構成は次のようになります:
apply plugin: 'groovy'
dependencies {
//gradle sdk
compile gradleApi()
//groovy sdk
compile localGroovy()
}
これで簡単なプラグインが定義されました。実用のためにこのプラグインプロジェクトを jar パッケージとして生成し、他のプロジェクトで使用できるようにします。以下にカスタムプラグインプロジェクトのディレクトリのスクリーンショットを示します:
最後に、構築プロジェクトでこのプラグインを使用します。プラグインをプロジェクトの libs フォルダにコピーし、プラグインの classpath を指定し、apply メソッドを使用してプラグインを使用します:
apply plugin: 'com.manu.plugin'
buildscript{
dependencies{
classpath files('libs/plugin.jar')
}
}
上記のコードの実行結果は次のとおりです:
PS E:\Gradle\study\GradlePlugin> gradle taskPlugin
> Task :taskPlugin
カスタムプラグインがタスクを作成しました
BUILD SUCCESSFUL in 2s
1 actionable task: 1 executed
プラグインがタスク taskPlugin を作成したため、このタスクを使用できます。プラグインの基本的な使用方法は以上です。次に、Java Gradle プラグインの使用を引き続き学びます。