我正在使用
the following guide构建自定义Gradle插件.我想在settings.gradle文件中定义一个属性并在插件类中读取它,但到目前为止每次尝试都失败了.
这是我得到的错误:
Could not find property 'MyProperty' on root Project 'MyProject'
这是我的settings.gradle文件:
gradle.ext.MyProperty = "The Value"
这是包含我的插件的文件:
package myplugin.gradle
import org.gradle.api.Project
import org.gradle.api.Plugin
class FirstPlugin implements Plugin<Project> {
void apply(Project project) {
project.task('myTask') << {
def instance = project.MyProperty
println "VALUE : " + instance
}
}
}
如果我在build.gradle中放置project.ext.set(“MyProperty”,“Property Value”),我可以访问MyProperty,但我找不到在settings.gradle文件中设置它的方法.
我想解决这个问题的一种方法是在build.gradle中读取settings.gradle的内容并使用project.ext.set(…)将其发送到插件,但是有更直接的方法吗?
最佳答案 显然,要走的路(无论如何更好)是使用扩展对象.此扩展对象允许将build.gradle文件中的数据发送到插件. build.gradle文件读取settings.gradle文件中变量的内容并将其放在扩展对象中.
在包含插件的文件中:
package myplugin.gradle
import org.gradle.api.Project
import org.gradle.api.Plugin
class MyExtension {
String myProperty
}
class FirstPlugin implements Plugin<Project> {
void apply(Project project) {
project.extensions.create('myExtensionName', MyExtension)
project.task('myTask') << {
def instance = project.myExtensionName.myProperty
println "VALUE : " + instance
}
}
}
在build.gradle文件中:
apply plugin: 'myPluginName'
...
myExtensionName {
myProperty = gradle.ext.myPropertyInSettings
}
最后,在settings.gradle文件中:
gradle.ext.myPropertyInSettings = "The Value"
另外,我建议使用this教程而不是Gradle提供的教程.