Gradle-プラグイン

プラグインはタスクのセットに他なりません。タスクのコンパイル、ドメインオブジェクトの設定、ソースファイルの設定など、ほとんどすべての便利なタスクはプラグインによって処理されます。プラグインをプロジェクトに適用すると、プラグインがプロジェクトの機能を拡張できるようになります。プラグインは次のようなことを行うことができます-

  • 基本的なGradleモデルを拡張します(たとえば、構成可能な新しいDSL要素を追加します)。
  • 変換に従ってプロジェクトを構成します(たとえば、新しいタスクを追加したり、適切なデフォルトを構成したりします)。
  • 特定の構成を適用します(たとえば、組織のリポジトリを追加したり、標準を適用したりします)。

プラグインの種類

Gradleには、スクリプトプラグインとバイナリプラグインの2種類のプラグインがあります。スクリプトプラグインは、ビルドを操作するための宣言型アプローチを提供する追加のビルドスクリプトです。これは通常、ビルド内で使用されます。バイナリプラグインは、プラグインインターフェイスを実装し、ビルドを操作するためのプログラムによるアプローチを採用するクラスです。バイナリプラグインは、ビルドスクリプト、プロジェクト階層、または外部のプラグインJARに常駐できます。

プラグインの適用

Project.apply()APIメソッドは、特定のプラグインを適用するために使用されます。同じプラグインを複数回使用できます。プラグインには、スクリプトプラグインとバイナリプラグインの2種類があります。

スクリプトプラグイン

スクリプトプラグインは、ローカルファイルシステムまたはリモートの場所にあるスクリプトから適用できます。ファイルシステムの場所はプロジェクトディレクトリからの相対位置ですが、リモートスクリプトの場所はHTTPURLを指定します。次のコードスニペットを見てください。適用するために使用されますother.gradleビルドスクリプトへのプラグイン。このコードをで使用するbuild.gradle ファイル。

apply from: 'other.gradle'

バイナリプラグイン

各プラグインはプラグインIDで識別され、一部のコアプラグインは短い名前を使用して適用し、一部のコミュニティプラグインはプラグインIDに完全修飾名を使用しています。プラグインのクラスを指定できる場合もあります。

次のコードスニペットを見てください。タイプを使用してJavaプラグインを適用する方法を示します。このコードをで使用するbuild.gradle ファイル。

apply plugin: JavaPlugin

短い名前を使用してコアプラグインを適用するための次のコードを調べてください。このコードをで使用するbuild.gradle ファイル。

plugins {
   id 'java'
}

短い名前を使用してコミュニティプラグインを適用するための次のコードを調べてください。このコードをで使用するbuild.gradle ファイル。

plugins {
   id "com.jfrog.bintray" version "0.4.1"
}

カスタムプラグインの作成

カスタムプラグインを作成するときは、プラグインの実装を作成する必要があります。Gradleはプラグインをインスタンス化し、Plugin.apply()メソッドを使用してプラグインインスタンスを呼び出します。次のサンプルには、プロジェクトにhelloタスクを追加するグリーティングプラグインが含まれています。次のコードを見てください。このコードをで使用するbuild.gradle ファイル。

apply plugin: GreetingPlugin

class GreetingPlugin implements Plugin<Project> {
   void apply(Project project) {
      project.task('hello') << {
         println "Hello from the GreetingPlugin"
      }
   }
}

次のコードを使用して、上記のスクリプトを実行します。

C:\> gradle -q hello

出力:

Hello from the GreetingPlugin

ビルドからの入力の取得

ほとんどのプラグインは、ビルドスクリプトからの構成サポートを必要とします。Gradleプロジェクトには、プラグインに渡されるすべての設定とプロパティを追跡するのに役立つExtensionContainerオブジェクトが関連付けられています。

簡単な拡張オブジェクトをプロジェクトに追加しましょう。ここでは、あいさつ拡張オブジェクトをプロジェクトに追加します。これにより、あいさつを構成できます。このコードをで使用するbuild.gradle ファイル。

apply plugin: GreetingPlugin

greeting.message = 'Hi from Gradle'

class GreetingPlugin implements Plugin<Project> {
   void apply(Project project) {
      // Add the 'greeting' extension object
      project.extensions.create("greeting", GreetingPluginExtension)
		
      // Add a task that uses the configuration
      project.task('hello') << {
         println project.greeting.message
      }
   }
}

class GreetingPluginExtension {
   def String message = 'Hello from GreetingPlugin'
}

次のコードを使用して、上記のスクリプトを実行します。

C:\> gradle -q hello

出力:

Hi from Gradle

この例では、GreetingPluginは、messageというフィールドを持つ単純な古いGroovyオブジェクトです。拡張オブジェクトは、greetingという名前でプラグインリストに追加されます。このオブジェクトは、拡張オブジェクトと同じ名前のプロジェクトプロパティとして使用できるようになります。

Gradleは、拡張オブジェクトごとに構成クロージャを追加するため、設定をグループ化できます。次のコードを見てください。このコードをで使用するbuild.gradle ファイル。

apply plugin: GreetingPlugin

greeting {
   message = 'Hi'
   greeter = 'Gradle'
}

class GreetingPlugin implements Plugin<Project> {
   void apply(Project project) {
      project.extensions.create("greeting", GreetingPluginExtension)
		
      project.task('hello') << {
         println "${project.greeting.message} from ${project.greeting.greeter}"
      }
   }
}

class GreetingPluginExtension {
   String message
   String greeter
}

次のコードを使用して、上記のスクリプトを実行します。

C:\> gradle -q hello

出力:

Hello from Gradle

標準のGradleプラグイン

Gradleディストリビューションに含まれているさまざまなプラグインがあります。

言語プラグイン

これらのプラグインは、JVMでコンパイルおよび実行できるさまざまな言語のサポートを追加します。

プラグインID 自動的に適用 説明
java java-base Javaのコンパイル、テスト、およびバンドル機能をプロジェクトに追加します。これは、他の多くのGradleプラグインの基盤として機能します。
グルーヴィー java、groovy-base Groovyプロジェクトの構築のサポートを追加します。
Scala java、scala-base Scalaプロジェクトを構築するためのサポートを追加します。
antlr Java Antlrを使用してパーサーを生成するためのサポートを追加します。

言語プラグインのインキュベーション

これらのプラグインは、さまざまな言語のサポートを追加します。

プラグインID 自動的に適用 説明
アセンブラ - プロジェクトにネイティブアセンブリ言語機能を追加します。
c - Cソースコンパイル機能をプロジェクトに追加します。
cpp - C ++ソースコンパイル機能をプロジェクトに追加します。
Objective-c - プロジェクトにObjective-Cソースコンパイル機能を追加します。
目的-cpp - プロジェクトにObjective-C ++ソースコンパイル機能を追加します。
ウィンドウリソース - ネイティブバイナリにWindowsリソースを含めるためのサポートを追加します。