Gradle从0入门到实战系列【五】工程化之插件

简介: 插件可以封装一系列任务,例如 编译,测试,打包等。 IDEA、VsCode、Eclipse、Maven、Chrome等都是支持插件集成的工具。插件意味着扩展,Gradle只要定义好插件规范,各大厂商或个人开发者遵循这个规范就能开发出很多有用的插件,从而丰富Gradle生态。

获取插件的渠道有以下2种

  • 访问Gradle插件官网
  • Github搜索,有一些插件并没有被官方所收录,但仍然能够使用,但需要承担一些隐藏的风险

现如今使用评率非常高的几款插件:SpringBoot构建插件,Docker容器集成插件,junit单元测试插件等

插件分类

脚本插件script plugins

脚本插件通常是一个脚本,和一个普通的 build.gradle 文件没什么区别 。脚本插件其实并不能算是一个真正的插件,就是一个扩展脚本。但我们不能忽视它的作用,它是脚本模块化的基础。我们可以把复杂的脚本文件,进行分块,分段整理,拆分成一个个职责分明的脚本插件。就像我们平常封装的 Utils 工具类一样,封装一个 utils.gradle 工具脚本。脚本可以存在本地,也可以存在网络上,只需要提供脚本的相对路径或者 URL ,引用方式如下:

//使用本地插件
apply from: './other.gradle'
apply from: this.rootProject.file('other.gradle')

//使用网络远程插件
apply from: 'https://gitee.com/xxx/xx/raw/master/it235.gradle'

二进制插件binary plugins

我们可以通过二进制插件的ID来应用。插件 ID 是插件的全局唯一标识符或者名字。Gradle中的插件按照来源可以分为核心插件和非核心插件。Gradle 核心插件的特殊之处就在于他们都有一个简短的 ID,例如 Java 插件的是 "java" 。其它非核心二进制插件也必须使用插件ID的完全限定形式(例com.github.foo.bar)。使用二进制插件的方式有2种,如下。

  1. 必须结合buildscript{} 应用插件 ,老版本中使用

    //build.gradle中的顶级语句,如下分别是使用java/idea/war/docker插件
    apply plugin: 'java'
    //apply plugin: JavaPlugin 也可以通过指定插件类来应用,与java效果一样
    apply plugin: 'idea'
    apply plugin: "war"
    //声明
    apply plugin: "com.jfrog.bintray"
    apply plugin: 'org.akhikhl.gretty'
    
    //buildscript
    buildscript {
      repositories {
        maven {url "https://maven.aliyun.com/repository/public"}
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
      }
      //应用插件
      dependencies {
        classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0"
        classpath 'org.akhikhl.gretty:gretty:+'
      }
    }
  2. plugins{} 新写法,这种叫plugins DSL写法,对应的是PluginDependenciesSpec实例

    //build.gradle中的顶级语句,声明和应用放在一起
    plugins {
      //核心插件,gradle提供
      id 'java'
      id 'eclipse'
      id 'war'
      //非核心插件(社区插件),必须通过id+version的全限定名的方式进行引用
      id 'com.bmuschko.docker-remote-api' version '6.7.0'
      //apply false 表示在父项目中声明,但是父项目不会立即加载,可以在子项目中通过ID的方式进行使用
      id 'com.jfrog.bintray' version '1.8.5' apply false
    }
    //注意:plugins暂时不支持第三方插件,如果要使用第三方插件请使用老的写法。同时plugins中不能随意编写其他的语句体

自定义插件

插件自定义包括三个步骤:建立插件工程、配置参数、发布插件与使用插件。

插件的源码可以存放在以下3个地方

  • build script中

    可以直接在build.gradle中编写插件,这样的好处是当前项目能够自动编译和加载,但该插件在构建脚本之外不可见。

    class GreetingPlugin implements Plugin<Project> {
        void apply(Project project) {
            project.task('hello') {
                doLast {
                    println 'Hello from the GreetingPlugin'
                }
            }
        }
    }
    
    // Apply the plugin
    apply plugin: GreetingPlugin
    
    //使用 gradle -q hello 执行即可
  • buildSrc project中

    您可以将插件的源代码放在以下目录中(不同语言编写用不同的目录)

    • rootProjectDir/buildSrc/src/main/java
    • rootProjectDir/buildSrc/src/main/groovy
    • rootProjectDir/buildSrc/src/main/kotlin

    Gradle 将负责编译和测试插件,并使其在构建脚本的类路径中可用。该插件对构建使用的每个构建脚本都是可见的。但是,它在构建之外是不可见的,因此您不能在定义它的构建之外重用插件。

  • 独立项目中

    创建一个单独的项目。该项目生成并发布一个 JAR,然后就可以在多个项目中使用该插件,其他开发者也能下载使用。我们一般会在该jar中编写或依赖一些插件,或者将几个相关的任务类捆绑到一起。

总结

在工作中我们95%的场景都是使用别人开发好的插件,而且DSL的写法会成为主流,所以大家掌握插件的使用即可,到这里我们的插件学习就基本掌握了,下一篇我们来了解Gradle的生命周期

目录
相关文章
|
6月前
|
XML Java 测试技术
Gradle安装部署与基础入门详解
Gradle安装部署与基础入门详解
717 0
|
Java 开发工具 Android开发
Cocos Creator 2.4.6 Android Gradle 版本升级为 6.5.1(插件4.1.0)
Cocos Creator 2.4.6 Android Gradle 版本升级为 6.5.1(插件4.1.0)
315 1
|
Android开发
Android Studio中修改gradle插件版本和Gradle版本
Android项目中,我们一般要设置gradle插件版本和gradle版本。 项目根目录下的build.gradle文件中,通过classpath可以指定gradle插件的版本。
|
5月前
|
Java API 项目管理
Java一分钟之-Gradle插件开发:自定义构建逻辑
【6月更文挑战第5天】Gradle插件开发详解:从入门到发布。文章介绍如何创建自定义插件,强调依赖管理、任务命名和配置阶段的理解。示例代码展示插件实现及避免常见问题的方法。最后,讨论插件的发布与共享,助你提升构建效率并贡献于开发者社区。动手实践,打造强大Gradle插件!
119 3
|
6月前
|
XML 缓存 Java
Gradle 构建自动化工具入门
Gradle 构建自动化工具入门
|
6月前
|
存储 缓存 Java
Gradle笔记 八 Gradle 插件(二)
Gradle笔记 八 Gradle 插件
135 0
|
6月前
|
Java
Gradle笔记 八 Gradle 插件(一)
Gradle笔记 八 Gradle 插件
136 0
|
IDE Java 应用服务中间件
以Gradle插件的方式为Java web项目启动Tomcat
在社区版IntelliJ IDEA除了用SmartTomcat,还有什么方式可以在可调试的情况下启动Tomcat呢,来试试com.bmuschko.tomcat插件吧
458 0
以Gradle插件的方式为Java web项目启动Tomcat
|
XML Java Apache
Gradle极简入门
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,而不是传统的XML。Gradle构建脚本是用Groovy编写的,也可以使用Kotlin编写,两者都是基于JVM的语言。
319 0
|
Java 程序员 Maven
在AndroidStudio中自定义Gradle插件
在AndroidStudio中自定义Gradle插件
在AndroidStudio中自定义Gradle插件