获取插件的渠道有以下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种,如下。
必须结合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:+' } }
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的生命周期