一、Build Script 自定义插件
1、基本介绍
-
插件代码直接写在模块级
build.gradle文件中 -
逻辑非常简单,且仅在该模块使用
2、演示
(1)具体实现
- 在模块级
build.gradle文件中定义插件
groovy
class SimpleBuildScriptPlugin implements Plugin<Project> {
@Override
void apply(Project target) {
println "这是 SimpleBuildScriptPlugin"
// 创建任务
target.tasks.create("printMessage") {
doLast {
println "这是 SimpleBuildScriptPlugin 中的任务 printMessage"
}
}
target.tasks.create("printHello") {
doLast {
println "这是 SimpleBuildScriptPlugin 中的任务 printHello"
}
}
}
}
(2)使用插件
- 在模块级
build.gradle文件中使用插件
groovy
apply plugin: SimpleBuildScriptPlugin
(3)测试
-
构建项目时,输出结果如下
输出结果
Configure project :gradleplugin
这是 SimpleBuildScriptPlugin -
在项目根目录下如下指令
shell
.\gradlew printMessage
# 输出结果
> Configure project :gradleplugin
这是 SimpleBuildScriptPlugin
> Task :gradleplugin:printMessage
这是 SimpleBuildScriptPlugin 中的任务 printMessage
二、buildSrc 自定义插件
1、基本介绍
-
在项目根目录下创建 buildSrc 模块,代码会自动编译并供所有模块使用
-
逻辑较复杂,但在单一工程内部多个模块复用
2、演示
(1)具体实现
-
创建 buildSrc 模块
-
在
settings.gradle文件中删除如下内容
groovy
include ':buildSrc'
-
在
buildSrc/src/main目录下创建 groovy 目录 -
在
buildSrc/src/main/groovy目录下创建并编辑com.my.buildsrc.SimpleBuildSrcPlugin.groovy
groovy
package com.my.buildsrc
import org.gradle.api.Plugin
import org.gradle.api.Project
class SimpleBuildSrcPlugin implements Plugin<Project> {
@Override
void apply(Project target) {
println "这是 SimpleBuildSrcPlugin"
// 添加扩展
target.extensions.create("buildSrcConfig", BuildSrcExtension)
// 创建任务
target.tasks.create("buildSrcTask") {
doLast {
def config = target.buildSrcConfig
println "Message: ${config.message ?: 'default message'}"
}
}
}
}
class BuildSrcExtension {
String message
}
-
在
buildSrc/src/main目录下创建resources目录,在buildSrc/src/main/resources目录下创建META-INF/gradle-plugins目录 -
在
buildSrc/src/main/resources/META-INF/gradle-plugins目录下创建并编辑com.my.buildsrc.properties
properties
implementation-class=com.my.buildsrc.SimpleBuildSrcPlugin
(2)使用插件
- 在其他模块的模块级
build.gradle文件中使用插件
groovy
apply plugin: 'com.my.buildsrc'
buildSrcConfig {
message = "Hello World"
}
(3)测试
-
构建项目时,输出结果如下
输出结果
Configure project :gradleplugin
这是 SimpleBuildSrcPlugin -
在项目根目录下如下指令
shell
.\gradlew buildSrcTask
# 输出结果
> Configure project :gradleplugin
这是 SimpleBuildSrcPlugin
> Task :gradleplugin:buildSrcTask
Message: Hello World
三、独立项目自定义插件
1、基本介绍
-
创建一个完全独立的 Java/Kotlin Library 模块,打包成 JAR 上传至本地或远程仓库
-
可以在多个不同工程之间复用,或准备开源
2、演示
(1)具体实现
-
创建一个名为 MyPluginProject 的项目
-
在项目中,删除 app 模块,创建一个名为 PluginModule 的模块
-
在
PluginModule/src/main/java目录下创建并编辑com.my.pluginmodule.SimplePlugin.java
java
public class SimplePlugin implements Plugin<Project> {
@Override
public void apply(Project target) {
System.out.println("这是 SimplePlugin");
// 创建任务
Task task = target.getTasks().create("simpleTask");
task.doLast(t -> {
System.out.println("这是 simpleTask 任务");
});
}
}
- 在
PluginModule/src/main/resources/META-INF/gradle-plugins目录下创建并编辑com.my.pluginmodule.properties
properties
implementation-class=com.my.pluginmodule.SimplePlugin
- 修改 PluginModule 的
build.gradle文件
groovy
plugins {
id 'java-library'
id 'maven-publish'
}
dependencies {
implementation gradleApi()
}
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
// 发布配置
publishing {
publications {
plugin(MavenPublication) {
from components.java
groupId = 'com.my'
artifactId = 'pluginmodule'
version = '1.0.0'
}
}
repositories {
mavenLocal()
}
}
- 在项目根目录下如下指令,发布插件
shell
./gradlew :pluginmodule:publishToMavenLocal
(2)使用插件
- 在项目级
build.gradle文件中,添加如下内容
groovy
buildscript {
repositories {
mavenLocal()
}
dependencies {
classpath 'com.my:pluginmodule:1.0.0'
}
}
- 在模块级
build.gradle文件中,添加如下内容
groovy
apply plugin: 'com.my.pluginmodule'
(3)测试
-
构建项目时,输出结果如下
输出结果
Configure project :gradleplugin
这是 SimplePlugin -
在项目根目录下如下指令
shell
.\gradlew simpleTask
# 输出结果
> Configure project :gradleplugin
这是 SimplePlugin
> Task :gradleplugin:simpleTask
这是 simpleTask 任务