内容简介: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插件开发 -- 在插件使用数据库存储数据
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Growth Hack 這樣做
Xdite / PCuSER電腦人文化 / 2016-5-7 / 300.00台幣
◎具體教你在預算有限的情況之下,把成長做出來的可行與必要方法! ◎帶動台灣成長駭客話題的專業講師,親授讓產品突破80分的成長秘笈 @這本書要給誰看? 1. 創業者、個人品牌經營者,想要提高自己服務轉換率的人。 2. 空有產品,但是賣不出去,花了錢投廣告卻效果低落的人。 @這本書有什麼不一樣? 1.全球最重要的趨勢,台灣最知名的 Growth Hack 講師 Xd......一起来看看 《Growth Hack 這樣做》 这本书的介绍吧!