一、插件创建的三种方式
1. 构建脚本中
您可以直接在构建脚本中包含插件的源代码。这样做的好处是插件会自动编译并包含在构建脚本的类路径中,而您无需执行任何操作。但是,该插件在构建脚本之外不可见,因此您不能在定义它的构建脚本之外重用该插件。
2. buildSrc 项目 中 示例
您可以将插件的源代码放在rootProjectDir/buildSrc/src/main/java目录中(rootProjectDir/buildSrc/src/main/groovy或rootProjectDir/buildSrc/src/main/kotlin取决于您喜欢的语言)。Gradle 将负责编译和测试插件,并使其在构建脚本的类路径上可用。该插件对构建使用的每个构建脚本都是可见的。但是,它在构建之外不可见,因此您不能在定义它的构建之外重用插件。
有关该项目的更多详细信息,请参阅组织 GradlebuildSrc项目。
3. 独立项目 【推荐】
您可以为您的插件创建一个单独的项目。该项目生成并发布一个 JAR,然后您可以在多个构建中使用它并与他人共享。通常,这个 JAR 可能包含一些插件,或者将几个相关的任务类捆绑到一个库中。或者两者的某种组合。
二、独立项目方式创建插件 【gradle init 命令创建插件项目】
1.新建存放插件目录如DependenceGradlePlugin
2.cd 进入该目录下执行gradle init
//1
gradle init
//2 输入4 选择构建gradle plugin
Select type of project to generate:
1: basic
2: application
3: library
4: Gradle plugin
Enter selection (default: basic) [1..4] 4// 输入4
//3 选择熟悉的语言
Select implementation language:
1: Groovy
2: Java
3: Kotlin
Enter selection (default: Java) [1..3] 1// 这里选熟悉的
# //4 DSL(Domain-specific language 特定领域语言),也就是我们编译脚本语言,我们同样选 Groovy
Select build script DSL:
1: Groovy
2: Kotlin
Enter selection (default: Groovy) [1..2] 1
// 5 设置项目名称 默认为文件夹的名字
Project name (default: test): MyPlugin
// 6 设置资源包名
Source package (default: MyPlugin): com.my.plugin
三、插件编写
打开上述创建的项目 插件源代码在 MyPluginPlugin
public class DependenceGradlePluginPlugin implements Plugin<Project> {
public void apply(Project project) {
// Register a task checkConflictDependency 检测是否含有冲突
project.tasks.register("GradleCheckConflictDependency") {
// 设置包名分组显示、否则默认在 AS右侧工具栏->Gradle->Tasks->other 中
// 加了分组后 在AS右侧工具栏->Gradle->Tasks->GradleCheck 中
group = "GradleCheck"
doLast {
// 执行这行命令../gredlew checkConflictDependency
'../gredlew checkConflictDependency'.execute(null, project.getProjectDir())
}
}
// Register a task sourceTask 检测源码
project.tasks.register("GradleSourceTask") {
group = "GradleCheck"
doLast {
'../gradlew sourceTask'.execute(null, project.getProjectDir())
}
}
}
}
四、发布插件 【本地和远端maven】
要使用插件,我们得先把插件打包成jar文件,然后发布到maven 其他项目才可以引入使用
1. 新建gradle.properties 配置文件 配置发布所需要参数
GROUP_ID = com.my.plugin
ARTIFACT_ID = dependenceGradlePlugin
# maven的 用户名密码
MAVEN_USERNAME = 用户名
MAVEN_PASSWORD = 密码
# 版本号
VERSION_ID = 1.0.8-SNAPSHOT
2. 创建独立的发布相关.gradle文件 ->build_upload.gradle
apply plugin: 'maven-publish'
/**
* 定义插件发布信息
*/
publishing {
// 发布到远端maven
// repositories {
// maven {
// url project.version.endsWith('-SNAPSHOT') ? '快照版本的maven路径url' : '正式版本的url'
// credentials {//验证maven 仓库的用户名密码
// username MAVEN_USERNAME
// password MAVEN_PASSWORD
// }
// }
// }
// 发布到本地指定目录
repositories {
maven {
// $rootDir 表示你项目的根目录
url = "$rootDir/repo"
}
}
publications {
// 定义发布任务 jar为名称 可为任意
jar(MavenPublication){
// 插件的组ID,建议设置为插件的包名
groupId GROUP_ID
// 插件名字
artifactId ARTIFACT_ID
// 版本
version VERSION_ID
// 发布.jar文件
from components.java
}
}
}
3. 将build_upload.gradle 应用到 build.gradle【工程目录下的】
在工程目录下的build.gradle里添加
apply from:'build_upload.gradle'
执行Sync Now 后 可以在 AS右侧-》Gradle-》Tasks-》publishing中找到发布任务
4. 点击运行后就可以看到项目右侧生成的jar
五、其他工程引入测试
1.在待引入工程的 工程目录下的build.gradle中配置插件的maven依赖
2. 在待引入工程的 app目录下的build.gradle 引入插件
id源自 插件项目build.gradle中配置的该插件的id