内容简介:Gradle是支持配置,外部的配置文件来设置插件的一些输入条件,在插件中是通过如我们在项目的这代表一条这条消息,
Gradle是支持配置,外部的配置文件来设置插件的一些输入条件,在插件中是通过 extensions
实现的。
配置
如我们在项目的 build.gradle
下配置如下:
cyMessage { message = 'hello ' greeter = 'cyning' }
这代表一条这条消息, message
代表消息内容, greeter
代表消息源。
那么插件如何获取这条消息呢?
我们需要在 Plugin
来注册一个实体类来获取。
void apply(Project project) { def extension = project.extensions.create("cyMessage", Message) }
实体
其中Message是个实体类:
代码片段 1
public class Message { String message = "empty" String greeter = "none" }
使用
我们可以自己写一个 task
(下一节就是会介绍task)来验证 extensions
获取是否成功。
代码片段 2
def extension = project.extensions.create("cyMessage", Message) project.task('sendMessage') { doLast { println "${extension.message} from ${extension.greeter}" println project.cyMessage.message + "from ${extension.greeter}" } }
可以注意到
1. extensions.create("cyMessage", Message)
返回的是 Message
的实例
2.通过 extensions.createproject注册了一个
cyMessage`的属性。
所以获取代码片段中的 message
也有两种方式”
${extension.message}
和 project.cyMessage.message
。
Task
Task是我们插件的任务单位,也就是说插件实际上就是一个个task,还记得我们常用的clean命令,实际上clean也是task,在android项目中,我们可以用 gradlew tasks
来查看这个项目中的task。
每个task实际上是可以分组的,如上图的 Android tasks
Build tasks
,每个任务后面的小字实际上是task的描述,
task的创建
task目前可以有多种方法创建和操作。
gradle脚本
task hello1 << { println 'hello1' } task hello2 { doLast { println 'hello2'} } task hello3 { println "task ----" } // 类似于<< 不过新版本已经弃用 hello3.leftShift { print("hello world 3") }
-
doLast
相当于是在任务执行Task
结束前要执行的,是这个Task
的最后一个步骤。 -
<<
和leftShift
是同一个意思也表示在相当于是在任务执行Task结束前要执行的,
groovy脚本创建
用 gradle
脚本能容易写出脚本,但是对于一些复杂的 Task
还是需要我们用 groovy
来实现,可以控制控制他的灵活度。
我们可以来写我们的第一个 Task
.
public class FirstTask extends DefaultTask { String message = 'This is default message' // @TaskAction 表示该Task要执行的动作,即在调用该Task时,hello()方法将被执行 @TaskAction def hello(){ println "Hello world. $message" } }
@TaskAction
有注释,我就不再重复了, $message
是我们内部定义的一个变量,默认是 message
我们用这个 task
时只需要,写入我们的type为 FirstTask
.
// hello使用了默认的message值 task task1(type:FirstTask) // 重新设置了message的值 task task2(type:FirstTask){ message ="I am an android developer" }
使用
可以直接在终端下输入
./gradlew :app:task2
app就是引入我们的task的项目,当然你可以可以用 android studio
的GUI界面.
task
和 extensions
自定义插件
那我们开始我们的能传参的插件:
在主项目的build.gradle开始我们的配置:
apply plugin: 'cyning' cyMessage { message = 'hello ' greeter = 'cyning' }
cyning
就是我们的插件, cyMessage
是我们定义的 ext·
.
插件
我们需要定义自己的 plugin
public class FirstPlugin implements Plugin<Project> { void apply(Project project) { def cyMessage = project.extensions.create("cyMessage", Message, project) Task sendMsgTsk = project.task("sendMessage", type:FirstTask ) { message = cyMessage.message greeter = cyMessage.greeter } } }
接收从外部的参数 cyMessage
,同时将 cyMessage.message
和 cyMessage.greeter
传给 sendMessage
这个task.
Message这个实体类想获取 extensions
,必须按照如下方法实现:
public class Message { final Property<String> message; final Property<String> greeter; Message(Project project) { message = project.objects.property(String) greeter = project.objects.property(String) message.set('Hello default message' ) } }
注意这个 project
是在 plugin
时传入的.
task也很好定义
public class FirstTask extends DefaultTask { final Property<String> message = project.objects.property(String) final Property<String> greeter = project.objects.property(String) // @TaskAction 表示该Task要执行的动作,即在调用该Task时,hello()方法将被执行 @TaskAction def hello(){ println message.get() + " from " + greeter.get() } }
参考
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Gradle插件开发系列之开发第一个gradle插件
- (是时候开发属于自己的插件了)数据校验插件开发指南
- IDEA 插件:多线程文件下载插件开发
- 从头开发一个Flutter插件(二)高德地图定位插件
- Gradle插件开发系列之gradle插件调试方法
- WordPress插件开发 -- 在插件使用数据库存储数据
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PHP Cookbook
Adam Trachtenberg、David Sklar / O'Reilly Media / 2006-08-01 / USD 44.99
When it comes to creating dynamic web sites, the open source PHP language is red-hot property: used on more than 20 million web sites today, PHP is now more popular than Microsoft's ASP.NET technology......一起来看看 《PHP Cookbook》 这本书的介绍吧!
Markdown 在线编辑器
Markdown 在线编辑器
HEX HSV 转换工具
HEX HSV 互换工具