插件扩展
原因
为什么需要插件扩展?插件内部执行任务的时候需要依赖外界脚本传入的值进行相对应的构建。
也就是说插件里面的属性需要从外部拿到,外部去设置这些属性。
具体步骤
添加扩展属性
插件通过apply引入,在配置阶段会执行plugin的apply方法,方法内部定义扩展属性使用
代码语言:javascript复制第一个参数代表扩展属性的名称,第二个参数的名称代表接收的class类型
//apply方法内部调用以下代码用于添加扩展属性
project.extensions.create("grettings ",A)
//插件内定义bean
class A{
String name
}
复制代码
设置扩展属性
可通过gradle在构建阶段执行build.grade时设置属性值:
gradle中有一个和项目相关联的ExtensionContainer对象,可以通过project.extension.属性名称获取,脚本中直接设置。简写为ext,这就是为什么可以直接在脚本中拿到ext里面的属性值
为什么可以使用闭包设置扩展属性呢? 原因是gradle为每个扩展属性都添加了一个配置的闭包,因此可以通过闭包设置扩展属性
使用扩展属性
配置阶段中先引入插件,在插件的apply方法添加了扩展属性后;接着脚本继续往下执行设置了扩展属性,那么接下来就要进入执行阶段了,插件的task在执行阶段如何获取设置的扩展属性呢?
代码语言:javascript复制//内部task执行的时候通过以下代码获取
project.extensions.greeting.name
复制代码
通过task执行的时候获取扩展属性。
grovvy学习之源集Sourcesets
定义
源集表示一组用于编译执行的源文件,一个源集有一个相关联的编译类路径和运行时类路径。
默认源集是main和test目录,也可添加其他的源集,在sourcesets熟悉中新增源集,并设置该源集的属性
作用意义
javaPlugin就是利用源集来管理java源代码目录的,并且该插件默认提供了两个源集就是main和test。
- main目录包含项目源代码,用于编译成jar文件
- test目录包含单元测试代码,用于编译后使用junit或testng执行
可设置属性
在build.gradle中设置sourcesets闭包(可查看之前的闭包文章,加深映像),并添加源集,在源集中设置该源集的信息
示例:
代码语言:javascript复制sourcesets{
//默认的main和test两个源集,未指定编译的java,resource文件夹时默认为当前文件下
main{
}
test{
}
// 新增一个名字叫beiyang 的源集,之后在src目录下面创建包的时候就会提示创建beiyang/java和 beiyang/resource这两个文件了;如果想要指定编译java的自定义文件夹,通过java.srcdirs即可指定;也可设置输出后的class存放位置参考上面属性
beiyang{
}
}
复制代码
动态添加源集
上面是自定义的源集,那么自带的源集maintest是什么时候被添加的呢?我们创建工程的时候也没有看见sourcesets闭包是吧?
答案是插件中帮我们创建了源集,看下图代码即可理解。插件内部可以动态添加源集(下图代码为groovy插件帮我们添加的源集),因此我们也可以实现不用手动定义sourceSets闭包属性采用插件动态添加源集
如何检验添加成功
源集添加成功后,我们在src目录下面创建包的时候as会提示我们要添加的对应的java和resource包,非常银杏化
源集添加依赖
在dependcies属性中设置需要为源集引入的依赖,默认为main,如果想要指定源集添加依赖,则在引入依赖关键字的前缀添加源集名称即可,例如testcompile.....