gradle
Gradleプラグイン
サーチ…
`buildSrc`からの単純なgradleプラグイン
あなたのgradleプロジェクト用のカスタムプラグインとDSLの作成方法の簡単な例。
このサンプルでは、プラグインを作成する3つの方法のうちの1つを使用しています。
3つの方法があります:
- 列をなして
- buildSrc
- スタンドアロンプラグイン
この例は、 buildSrcフォルダからプラグインを作成する方法を示しています。
このサンプルでは、5つのファイル
// project's build.gradle
build.gradle
// build.gradle to build the `buildSrc` module
buildSrc/build.gradle
// file name will be the plugin name used in the `apply plugin: $name`
// where name would be `sample` in this example
buildSrc/src/main/resources/META-INF/gradle-plugins/sample.properties
// our DSL (Domain Specific Language) model
buildSrc/src/main/groovy/so/docs/gradle/plugin/SampleModel.groovy
// our actual plugin that will read the values from the DSL
buildSrc/src/main/groovy/so/docs/gradle/plugin/SamplePlugin.groovy
build.gradle:
group 'so.docs.gradle'
version '1.0-SNAPSHOT'
apply plugin: 'groovy'
// apply our plugin... calls SamplePlugin#apply(Project)
apply plugin: 'sample'
repositories {
mavenCentral()
}
dependencies {
compile localGroovy()
}
// caller populates the extension model applied above
sample {
product = 'abc'
customer = 'zyx'
}
// dummy task to limit console output for example
task doNothing <<{}
buildSrc / build.gradle
apply plugin: 'groovy'
repositories {
mavenCentral()
}
dependencies {
compile localGroovy()
}
buildSrc / src / main / groovy / so / docs / gradle / plugin / SamplePlugin.groovy:
package so.docs.gradle.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
class SamplePlugin implements Plugin<Project> {
@Override
void apply(Project target) {
// create our extension on the project for our model
target.extensions.create('sample', SampleModel)
// once the script has been evaluated the values are available
target.afterEvaluate {
// here we can do whatever we need to with our values
println "populated model: $target.extensions.sample"
}
}
}
buildSrc / src / main / groovy / so / docs / gradle / plugin / SampleModel.groovy:
package so.docs.gradle.plugin
// define our DSL model
class SampleModel {
public String product;
public String customer;
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("SampleModel{");
sb.append("product='").append(product).append('\'');
sb.append(", customer='").append(customer).append('\'');
sb.append('}');
return sb.toString();
}
}
buildSrc / src / main / resources / META-INF / gradle-plugins / sample.properties
implementation-class=so.docs.gradle.plugin.SamplePlugin
この設定を使用すると、DSLブロック内の呼び出し元から提供された値を見ることができます
$ ./gradlew -q doNothing
SampleModel{product='abc', customer='zyx'}
スタンドアロンプラグインの作成方法
javaを使用してカスタムスタンドアロンのGradleプラグインを作成するには(Groovyも使用できます)、次のような構造を作成する必要があります。
plugin
|-- build.gradle
|-- settings.gradle
|-- src
|-- main
| |-- java
| |-- resources
| |-- META-INF
| |-- gradle-plugins
|-- test
セットアップのグラデル構成
build.gradle
ファイルでプロジェクトを定義します。
apply plugin: 'java'
apply plugin: 'maven'
dependencies {
compile gradleApi()
}
java
プラグインは、Javaコードの作成に使用されます。
gradleApi()
依存関係は、Gradleプラグインの作成に必要なすべてのメソッドとプロパティを提供します。
settings.gradle
ファイルで次のように入力します。
rootProject.name = 'myplugin'
MavenにアーティファクトIDを定義します 。
settings.gradle
ファイルがプラグインディレクトリに存在しない場合、デフォルト値はディレクトリの名前になります。
プラグインの作成
Plugin
インタフェースを実装するsrc/main/java/org/sample/MyPlugin.java
クラスを定義します。
import org.gradle.api.Plugin;
import org.gradle.api.Project;
public class MyPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
project.getTasks().create("myTask", MyTask.class);
}
}
DefaultTask
クラスを拡張するタスクを定義します。
import org.gradle.api.DefaultTask;
import org.gradle.api.tasks.TaskAction;
public class MyTask extends DefaultTask {
@TaskAction
public void myTask() {
System.out.println("Hello World");
}
}
プラグインクラスの宣言
META-INF/gradle-plugins
フォルダでは、プラグイン実装クラスを識別するimplementation-class
プロパティを定義するプロパティファイルを作成する必要があります。
META-INF/gradle-plugins/testplugin.properties
implementation-class=org.sample.MyPlugin.java
プロパティfilenameがプラグインIDと一致することに注意してください。
それを構築し公開する方法
build.gradle
ファイルを変更して、プラグインをMavenリポジトリにアップロードするための情報を追加します。
apply plugin: 'java'
apply plugin: 'maven'
dependencies {
compile gradleApi()
}
repositories {
jcenter()
}
group = 'org.sample'
version = '1.0'
uploadArchives {
repositories {
mavenDeployer {
repository(url: mavenLocal().url)
}
}
}
次のコマンドを使用して、 plugin/build.gradle
ファイルで定義されたMavenレポにGradleプラグインをビルドして公開することができます。
$ ./gradlew clean uploadArchives
どうやって使うのですか
プロジェクトのbuild.gradle
でプラグインの追加を使用するには:
buildscript {
repositories {
mavenLocal()
}
dependencies {
classpath group: 'org.sample', // Defined in the build.gradle of the plugin
name: 'myplugin', // Defined by the rootProject.name
version: '1.0'
}
}
apply plugin: 'testplugin' // Defined by the properties filename
次に、次のコマンドを使用してタスクを呼び出すことができます。
$ ./gradlew myTask