/--common
/--common/build.gradle
/--common/deploy.gradle
/--project1
/--project1/build.gradle
我有一个多项目结构,并从我的build.gradle
文件中提取了重复代码,并将其放入另一个文件deploy.gradle
中。
我已经将deploy.gradle
文件放在与build.gradle
文件相同的文件夹级别的common
项目中。文件夹结构如上所示。
在build.gradle
项目的common
文件中,我可以使用语句引用该文件,
apply from: 'deploy.gradle'
这就像一个梦想,common
项目构建可以很好地调用deploy.gradle
文件中的任务。
当我试图从其他项目中引用deploy.gradle
文件时,问题就出现了。当我将apply...
语句添加到build.gradle
of project1
时,会得到编译错误,
错误:(23,0)无法读取脚本'C:\path-to-project1-script-file\deploy.gradle‘,因为它不存在。
因此,Gradle只在project1
中寻找project1
文件,即使我在project1
build.gradle
文件中将依赖项设置为common
项目。
问题是如何使deploy.gradle
从common
项目中对project1
可见。
发布于 2017-12-08 06:31:32
我们成功地使用了以下项目布局
├── 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
$>
发布于 2017-12-07 19:00:19
下面是引用common/deploy.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
居住的地方。
https://stackoverflow.com/questions/47701148
复制相似问题