Gradle插件创建与发布

458 阅读3分钟

官方文档

一、插件创建的三种方式

1. 构建脚本中

您可以直接在构建脚本中包含插件的源代码。这样做的好处是插件会自动编译并包含在构建脚本的类路径中,而您无需执行任何操作。但是,该插件在构建脚本之外不可见,因此您不能在定义它的构建脚本之外重用该插件。

2. buildSrc 项目 中 示例

您可以将插件的源代码放在rootProjectDir/buildSrc/src/main/java目录中(rootProjectDir/buildSrc/src/main/groovyrootProjectDir/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中找到发布任务

image.png

4. 点击运行后就可以看到项目右侧生成的jar

image.png

五、其他工程引入测试

1.在待引入工程的 工程目录下的build.gradle中配置插件的maven依赖

image.png

2. 在待引入工程的 app目录下的build.gradle 引入插件

image.png

id源自 插件项目build.gradle中配置的该插件的id

image.png

3. Sync Now 后即可在AS右侧工具栏-》Gradle-》tasks中 看见分组后的引入的插件任务

image.png