使用 Java 开发 Gradle 插件的步骤
Gradle插件代码可以在build.gradle中,buildSrc项目中,以及独立的插件项目中编写。本文将介绍如何在一个独立的项目中使用Java语言编写Gradle插件,并发布到仓库中。
1创建项目
Gradle插件项目和普通的Java项目没有什么不同,普通项目是基于其它三方包进行开发,而Gradle插件项目基于Gradle的API进行开发。
基于Gradle创建一个Java项目,项目目录结构如下,和普通项目一样。
gradle-plugin-sample | ├───build.gradle ├───settings.gradle └───src ├───main │├───java │└───resources └───test ├───java └───resources
引入GradleAPI相关的jar包。为了方便起见,可以通过gradle插件java-gradle-plugin来引入Java插件,引入GradleAPI相关依赖以及生成插件相关的描述符。
build.gradle
plugins{ id'java-gradle-plugin' } group'com.robothy' version'1.0-SNAPSHOT' repositories{ mavenLocal() mavenCentral() } wrapper{ gradleVersion='6.7' }
2动手开发
项目创建好之后,就可以开始动手开发了。从项目构建角度来看,Gradle插件是一段可重用的构建逻辑,这段逻辑能够被应用到各个项目当中。更具体来说,Gradle插件是一个实现了org.gradle.api.Plugin接口的类,它被Project(可以认为是build.gralde,它本质是一个实现了Project接口的类)所引用。开发插件的本质就是往build.gradle中插入一段逻辑。
voidapply(Ttarget)
Plugin是一个泛型接口,有一个抽象方法apply,它的参数类型可以是Project,Settings,或者Gradle。
- 类型为Project,插件可以应用于build.gradle;
- 类型为Settings,插件可应用于settings.gradle;
- 类型为Gradle,插件可应用于Gradle初始化脚本。
在应用插件时,gradle会创建一个插件类的实例,并调用apply方法。因此,插件的逻辑就是apply方法中的代码。
一个独立的项目中可以有多个实现了Plugin接口的类,意味着一个项目可以包含多个插件。每一个插件都需要在build.gradle中添加相应的描述,java-gradle-plugin会根据这些描述生成插件描述符(jar包中的一个文件)。
假设要在gradle-plugin-sample项目中创建两个插件hello,goodbye,需要进行如下两个步骤:
1)创建插件类
HelloPlugin.java
importorg.gradle.api.Plugin; importorg.gradle.api.Project; publicclassHelloPluginimplementsPlugin{ @Override publicvoidapply(Projectproject){ System.out.println("Messagefromhelloplugin."); } }
GoodbyePlugin.java
importorg.gradle.api.Plugin; importorg.gradle.api.Project; publicclassGoodbyePluginimplementsPlugin{ @Override publicvoidapply(Projectproject){ System.out.println("Messagefromgoodbyeplugin."); } }
2)在build.gradle中添加描述内容
描述内容需要指定插件的ID和插件的入口类。
gradlePlugin{ plugins{ helloPlugin{ id='com.robothy.hello' implementationClass='com.robothy.HelloPlugin' } googbyePlugin{ id='com.robothy.goodbye' implementationClass='com.robothy.GoodbyePlugin' } } }
完成上面步骤之后,一个简单的插件就算完成了开发,接下来就可以发布和使用了。
3发布插件
插件可以发布到Maven仓库和Gradle官方插件门户。
3.1发布到Maven仓库
发布插件到Maven仓库和发布普通的jar包一样,需要用到maven-publish插件。要发布到远程Maven仓库可能需要提供认证信息,这里简单起见只发布到本地仓库。
1)在build.gradle文件中添加maven-publish插件
plugins{ id'java-gradle-plugin' id'maven-publish' }
2)执行gradlepublishToMavenLocal,成功之后可以在~/.m2目录下找打发布的jar包。
要使用发布到Maven仓库中的Gradle插件,需要先在settings.gradle中指定仓库。如下代码指定了插件仓库有本地Maven和Gradle插件门户。
pluginManagement{ repositories{ mavenLocal() gradlePluginPortal() } }
3.2发布到Gradle官方插件门户
我们平常使用的大部分插件来自于Gradle官方插件门户,开发人员注册一个Gradle账号之后可以将插件发布到门户,这样其他人就可以很方便地使用了。按照如下步骤发布插件,这里如果没有描述清楚可以移步Gradle官网文档:HowdoIaddmyplugintothepluginportal?。
1)注册门户账户
2)创建APIKey。注册好账户就能够看见了。
3)将APIKey添加到文件~/.gradle/gradle.properties
4)使用插件发布插件com.gradle.plugin-publish发布插件(不是病句,只是有点绕