我正在尝试为Gradle编写这个自定义插件,但是我一直在向插件正确传递参数。
在插件内部,我创建了如下扩展:
@Override void apply(final Project p) {
p.extensions.create('myPlugin', MyPluginData.class)
然后在里面
MyPluginData
我正在处理
def propertyMissing(String name, value)
接收我期望的客户参数。
最后在客户端应用程序中
build.gradle
我正在尝试配置数据:
println("From root value is " + SOME_VALUE)
myPlugin {
println("From plugin value is " + SOME_VALUE)
println("But from plugin 'findProperty' value is " + findProperty("SOME_VALUE"))
clientDataSet = {
data_1 = SOME_VALUE
data_2 = findProperty("SOME_VALUE")
data_3 = "this is a string"
在我的项目中定义了一些值
gradle.properties
,我在生成期间得到了以下日志:
从根值是正确的属性值
源插件值为空
但是从插件“findproperty”的值是正确的属性值
当然,在接收
data_1
一些_值为空,
data_2
有正确的值,数据3是我传递的硬编码字符串。
我的问题:
我做错了什么,或者插件上缺少哪个配置,这样客户端应用程序就可以直接引用插件中的属性。
渐变属性
文件夹?
编辑:
按评论要求
米拉普林达塔
仅仅是
extends HashMap<String, MyPluginDataSet>
和
MyPluginDataSet
只是一些字符串。
所以在里面
propertyMissing
我只是将属性名添加到映射中,然后创建
MyPuxIdLATASET
使用字符串(稍后用于生成自定义任务)。
缺少的属性函数:
def propertyMissing(String name, value) {
// Create the new data set and add to the map
def data = new MyPluginDataSet()
put(name, data)
// setup and execute the client closure to configure the data
def closure = value as Closure
closure.delegate = data
closure.resolveStrategy = Closure.DELEGATE_FIRST
closure.run()
}