我正在使用Ant将建筑物从建筑物转换为建筑物。该系统有多个顶级项目,它们共享一个按项目定制的公共构建系统。
我一直在通过将逻辑直接写入build.gradle文件来对新构建系统进行原型设计。随着我越来越接近最终系统,我需要将大部分逻辑拉出到模板构建中,所有项目都可以根据需要进行扩展。我还将模板构建为特定于功能的模块。
buildsupport/
- gradle/
- master-template.gradle
- legacy-properties.gradle
- build.gradle
main_module/
- build.gradle
- settings.gradle
module1/
- build.gradle
module2/
- build.gradle
buildsupport
组件在项目之间共享,包含模板构建和JUnit类别定义。 main_module
是包含顶级Gradle构建文件的主要模块,module1
和module2
是项目的子模块。
apply from: 'legacy-properties.gradle'
allprojects {
apply plugin: 'java'
...
}
configure(allprojects.findAll {it.name != 'buildsupport'}) {
...
}
buildscript {
apply from: '../buildsupport/gradle/master-template.gradle', to: this.buildscript
}
当我尝试从main_module
目录运行gradle时,我从Gradle收到以下错误:
* Where:
Script '[redacted]\buildsupport\gradle\legacy-properties.gradle' line: 6
* What went wrong:
A problem occurred evaluating script.
> No such property: allprojects for class: org.gradle.api.internal.initialization.DefaultScriptHandler
(第6行是buildscript {
的“legacy-properties.gradle
”行。)
如何让Gradle通过legacy-properties.gradle
脚本将master-template.gradle
正确导入main_module
项目?
答案 0 :(得分:0)
稍微搞乱之后,我发现我导入配置的顺序很重要。我在legacy-properties.gradle
中的allprojects
块之前应用master-template.gradle
文件,这适用于java
插件,该插件声明了sourceSets
块。通过移动" apply from
"在allprojects
块之后,脚本现在编译。