我们公司有一个Gradle脚本插件,其中包含许多任务。例如,它包含来自this answer的Jacoco afterEvaluate
块:
def pathsToExclude = ["**/*Example*"]
jacocoTestReport {
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it, exclude: pathsToExclude)
})
}
}
我们想要获取pathsToExclude
变量并在我们的build.gradle
文件中定义它,并在脚本插件中使用其余逻辑(让我们称之为company-script-plugin.gradle
。例如:
apply from: http://example.com/company-script-plugin.gradle
companyConfiguration {
pathsToExclude = ["**/*Example*"]
}
我们最初的想法是在构建脚本中添加一个任务,以便我们可以获得companyConfiguration
task companyConfiguration {
ext.pathsToExclude = []
}
但是,我们认为这是一个hacky变通方法,因为运行任务不会做任何事情。创建自己的配置块的正确方法是什么?
我们希望它尽可能简单,如果可能的话,成为一个脚本插件(而不是二进制插件)。
答案 0 :(得分:0)
这里有一个如何完成的例子:
apply plugin: CompanyPlugin
companyConfiguration {
pathsToExclude = ['a', 'b', 'c']
}
class CompanyPlugin implements Plugin<Project> {
void apply(Project p) {
println "Plugin ${getClass().simpleName} applied"
p.extensions.create('companyConfiguration', CompanyConfigurationExtension, p)
}
}
class CompanyConfigurationExtension {
List<String> pathsToExclude
CompanyConfigurationExtension(Project p) {
}
}
task printCompanyConfiguration {
doLast {
println "Path to exclide $companyConfiguration.pathsToExclude"
}
}
另外,请查看docs。