buildSrc
方式组织,创建插件Gradle项目会优先查找
buildSrc
目录,以includeBuild
的方式处理目录下项目。
方便本地项目使用。
buildSrc
下创建 配置文件 build.gralde
文档:buildSrc
命令行 或 IDE创建 插件项目,下面以 Gradle命令创建:
# 创建使用Java的插件
gradle init --type java-gradle-plugin
# 或,创建使用Kotlin的插件
gradle init --type kotlin-gradle-plugin
本地使用或调试,引入插件 项目(composing build):
pluginManagement {
includeBuild '../myplugin'
}
文档:Packaging a plugin
新创建项目,默认在 build.gradle 中,gradlePlugin
块 中配置插件ID 和 插件实现类:
gradlePlugin {
plugins {
greeting {
id = 'com.example.myplugin.greeting'
implementationClass = 'com.example.myplugin.MyPluginPlugin'
}
}
}
最终通过 资源目录 src/main/resources/META-INF/gradle-plugins
,
以 插件id 为名的 {plugin-id}.properties
文件,来实现 插件的查找:
implementation-class=com.example.myplugin.MyPluginPlugin
注:第1种方法,最终也是 生成上述 .properties
文件。由gradle插件 java-gradle-plugin
根据 gradlePlugin
块 自动生成。
文档:How does Gradle find the Plugin implementation?
上面说到 本地 includeBuild
来编译依赖插件:
1. plugins
DSL 使用:
在 项目中 build.gradle
,使用:
plugins {
id 'com.example.myplugin.greeting'
}
语法:
plugins {
id <>
id <> version <> [apply <>]
}
2. 传统的方法:
对于 以前不支持 plugins
DSL 的插件,使用 老的方法:
apply plugin: 'com.example.myplugin.greeting'
文档:https://docs.gradle.org/current/userguide/plugins.html#sec:old_plugin_application
以 {pluginId}.gradle.plugin
命名发布的Artifact,可以只用 插件ID,来
查找依赖的库。
查找定位逻辑:{pluginId}:{pluginId}.gradle.plugin:{version}
,这样的方式称为 Plugin Marker Artifcats
。
文档:
在 多项目工程中,对于 根项目(rootProject)可以 利用 plugins
的 apply
属性来统一版本。
在 根项目下的 build.gradle
中,声明:
// 根项目 build.gradle
plugins {
id('com.example.myplugin.greeting') version '1.0' apply false
}
// 子项目中 build.gradle 配置,无需 配置版本
plugins {
id('com.example.myplugin.greeting')
}
通常默认配置会 立马 解析(resolve) 并 应用(apply) 插件。
而apply
设为false
, 表示 不应用插件到 根项目。目的是 提前解析 插件,保持一样的版本。
使用 buildscript
脚本块,添加到 脚本的classpath中。
引用方法 组+插件ID+版本号:{group}:{pluginId}:{version}
// 参考 Android 项目插件
// 根项目 build.gradle
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
}
}
// 项目 build.gradle
apply plugin: 'com.android.application'
文档:Applying external plugins with same version to subprojects
参考之前文章:MavenCentral库发布记录