/--common
/--common/build.gradle
/--common/deploy.gradle
/--project1
/--project1/build.gradle
我有一个多项目结构,并从我的build.gradle
文件中提取重复代码,并将其放入另一个文件deploy.gradle
。
我已将deploy.gradle
文件放入common
项目中与build.gradle
文件相同的文件夹级别。文件夹结构如上所示。
在build.gradle
项目的common
文件中,我可以使用语句引用该文件,
apply from: 'deploy.gradle'
这就像一个梦想,common
项目构建完美地调用deploy.gradle
文件中的任务。
当我尝试从其他项目之一引用deploy.gradle
文件时出现问题。当我将apply...
语句添加到build.gradle
的{{1}}时,我收到了编译错误,
错误:(23,0)无法读取脚本 ' C:\路径到PROJECT1脚本文件\ deploy.gradle'因为它不存在。
所以Gradle只在project1
中查找deploy.gradle
文件,即使我在project1
common
文件中设置了project1
项目的相关性。
问题是如何将build.gradle
项目deploy.gradle
显示为common
。
答案 0 :(得分:1)
以下是引用project1/build.gradle
的示例common/deploy.gradle
:
// import myDeploy task
apply from: "${rootDir}/common/deploy.gradle"
task myProject1Task(dependsOn: 'myDeploy') {
doLast {
println 'TRACER myProject1Task'
}
}
在多项目构建中区分projectDir
和rootDir
通常很重要。 projectDir
是具体的子项目; rootDir
是settings.gradle
生活的地方。
答案 1 :(得分:0)
我们成功使用以下项目布局
├── a
│ └── build.gradle
├── b
│ └── build.gradle
├── build.gradle
├── gradle-scripts
│ └── deploy.gradle
└── settings.gradle
根项目build.gradle
定义
ext.gradleScript = { scriptName ->
file("${rootProject.projectDir}/gradle-scripts/${scriptName}.gradle")
}
子项目以gradle-scripts
这种方式使用脚本
apply from: gradleScript('deploy')
项目的全部内容:
$> find . -type f | while read file; do echo "--- $file ---" && cat $file; done
--- ./a/build.gradle ---
apply from: gradleScript('deploy')
--- ./b/build.gradle ---
apply from: gradleScript('deploy')
--- ./build.gradle ---
// Where common build logic is found
ext.gradleScript = { scriptName ->
file("${rootProject.projectDir}/gradle-scripts/${scriptName}.gradle")
}
--- ./gradle-scripts/deploy.gradle ---
task myDeployTask {
doLast { println 'common deploy logic goes here' }
}
--- ./settings.gradle ---
include 'a', 'b'
$> gradle -q b:myDeployTask
common deploy logic goes here
$>