Поиск…


Простой плагин gradle от `buildSrc`

Простой пример создания настраиваемого плагина и DSL для вашего проекта gradle.
В этом примере используется один из трех возможных способов создания плагинов.
Три способа:

  • в соответствии
  • buildSrc
  • автономные плагины

В этом примере показано создание плагина из папки buildSrc .

Этот образец создаст пять файлов

// 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 / Основной / заводной / так / документы / Gradle / плагин / 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 / Основной / заводной / так / документы / Gradle / плагин / 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 / основные / ресурсы / META-INF / Gradle-плагин / sample.properties

implementation-class=so.docs.gradle.plugin.SamplePlugin

Используя эту настройку, мы можем видеть значения, предоставленные вызывающим абонентом в вашем блоке DSL

 $ ./gradlew -q doNothing
SampleModel{product='abc', customer='zyx'}

Как написать автономный плагин

Чтобы создать собственный автономный подключаемый модуль Gradle с использованием java (вы также можете использовать 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.
Если файл settings.gradle отсутствует в каталоге плагина, значением по умолчанию будет имя каталога.

Создание плагина

Определите класс в src/main/java/org/sample/MyPlugin.java реализующем интерфейс Plugin .

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 которое идентифицирует класс реализации Plugin.

В META-INF/gradle-plugins/testplugin.properties

implementation-class=org.sample.MyPlugin.java

Обратите внимание, что имя файла свойства соответствует идентификатору плагина .

Как создать и опубликовать его

Измените файл 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)
        }
    }
} 

Вы можете создать и опубликовать подключаемый модуль Gradle к plugin/build.gradle Maven, определенному в файле plugin/build.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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow