如何編寫獨立外掛

要使用 java 建立自定義獨立 Gradle 外掛(你也可以使用 Groovy),你必須建立如下結構:

plugin
|-- build.gradle
|-- settings.gradle
|-- src
    |-- main
    |   |-- java
    |   |-- resources
    |       |-- META-INF
    |           |-- gradle-plugins
    |-- test

設定 gradle 配置

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

請注意,屬性檔名與外掛 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)
        }
    }
} 

你可以使用以下命令構建 Gradle 外掛並將其釋出到 plugin/build.gradle 檔案中定義的 Maven 儲存庫。

$ ./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