本次基于gradle-7.5尝试用单独项目来开发插件
首先我们创建一个工程“GradlePluginTest”,并等待创建完成
接着我们来创建插件项目,选择‘Java or Kotlin Library’并等待创建完成
- 删除多余项,删除完成后如下图所示
- 修改插件项目里的build.gradle文件
- 创建插件测试类
完整文件如下:
plugins {
id 'groovy'
id 'maven-publish'
}
java {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
sourceSets {
main {
java {
srcDir 'src/main/groovy'
//srcDir 'src/main/java'
//srcDir 'src/main/kotlin'
}
resources {
srcDir 'src/main/resources'
}
}
}
dependencies {
implementation gradleApi()
implementation localGroovy()
implementation 'com.android.tools.build:gradle:4.1.0'
}
publishing{
publications {
maven(MavenPublication) {
groupId = 'com.test.plugin'
artifactId = 'test_plugin'
version = '1.0.0'
from components.java
}
}
repositories {
maven {
url = layout.buildDirectory.dir('repo')
}
mavenLocal()
}
}
- 接下来我们要创建插件properties文件,这里的文件名要注意一下,后面我们需要用到。我们先来创建文件所属的文件夹,第一次创建文件夹
- 第二次创建文件夹
- 创建properties文件, 注意此时的文件名,后面有用
- 此时执行publish Task任务,完成插件部署到本地的maven仓库
在项目中使用
- 可以看到在'app'项目中没有引用的时候,在编译项目时,log日志里是不包含我们自定义插件里的输入日志
- 我们来引用一下自定义的插件,首先在工程的build.gradle文件中添加如下代码
buildscript {
repositories {
google()
mavenLocal()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.0.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30"
classpath 'com.test.plugin:test_plugin:1.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
- 然后在'app'项目的build.gradle中添加如下引用代码, 此处plugins里面的 id 'com.test.gradle.id'就是前面提到的properties的文件名
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'com.test.gradle.id'
}
- 接着我们再来编译一下项目,你会发现新大陆
至此我们自定义groovy插件算是大功告成了,这个时候可能会有人问,我们为啥要自定义插件?哈哈哈,你猜~
踩坑
Entry META-INF/gradle-plugins/com.test.gradle.id.properties is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/7.5/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:duplicatesStrategy for details.
解决方法是把插件项目里build.gradle文件中如下代码注释掉
sourceSets {
main {
java {
srcDir 'src/main/groovy'
//srcDir 'src/main/java'
//srcDir 'src/main/kotlin'
}
resources {
srcDir 'src/main/resources'
}
}
}
- 如果上传成功,在工程的目录中没有出现‘build’文件,可以到项目所在的文件夹中去查看是否有此文件
如下图所示,代表插件上传本地成功
不足之处,请不吝指教。谢谢!!!