如何将Gradle构建分解为多个文件?

时间:2018-11-01 23:30:23

标签: gradle groovy

我正在编写一个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类移动之外,还有其他明智的方法吗?我不愿意将它们移到类中,因为我想对插件项目本身应用相同的检查,并且如果它们需要编译,似乎很难应用它们。

1 个答案:

答案 0 :(得分:1)

所应用的脚本与插件具有不同的类加载器,它不继承buildscript类加载器,因此该任务不在类路径上。您可以执行以下操作:

project.ext.CheckSomething = CheckSomething
project.apply from: resolveFile('configuration1.gradle')

请参见https://discuss.gradle.org/t/buildscript-configurations-classpath-not-available-in-apply-from-scripts/1391