我正在编写一个Gradle插件,其中包含多个独立配置块的集合,这些块将应用于应用该插件的任何项目。
我想使片段非常分开,以阻止其他人向现有位置添加无关的逻辑,并提高对插件实际配置内容的了解。
所以我想我可以做到:
class CommonChecksPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
project.apply plugin: 'base'
def resolveFile = { filename ->
new URL(buildscript.sourceURI.toURL(), filename)
}
project.apply from: resolveFile('configuration1.gradle')
project.apply from: resolveFile('configuration2.gradle')
}
}
示例configurationN.gradle
:
task 'checkSomething', type: CheckSomething
问题是,该Java类CheckSomething
无法解决。
除了放弃所有子脚本并将其作为完整的Groovy类移动之外,还有其他明智的方法吗?我不愿意将它们移到类中,因为我想对插件项目本身应用相同的检查,并且如果它们需要编译,似乎很难应用它们。
答案 0 :(得分:1)
所应用的脚本与插件具有不同的类加载器,它不继承buildscript类加载器,因此该任务不在类路径上。您可以执行以下操作:
project.ext.CheckSomething = CheckSomething
project.apply from: resolveFile('configuration1.gradle')