gradle - 如何在gradle中的所有子项目之前先执行根项目
问题描述
我想在所有子项目之前先执行根项目,原因是我在根项目中有一组任务,它们通过附加到 properties.gradle 或 local.properties 文件(例如:VAR=10)来生成属性,然后我想在所有子项目中使用它。
由于当我尝试引用子项目中的属性时 gradle build 并行运行,这将失败。
期待回复提前谢谢。
解决方案
该gradle.properties
文件被读取一次,在构建执行开始时,它不会为每个子项目重新加载,因此如果您从根项目任务中更改此文件,您不能期望更新的属性可用于子项目项目任务。(而且我认为gradle.properties
从您的构建脚本中更改它不是一个好主意)
为什么不简单地使用project.setProperty(key, value)
(参见Project DSL)设置属性?
例子:
根项目构建:
task setProperties(){
doLast{
def var = computeVar()
project.setProperty('VAR', var )
// DO NOT DO THAT:
// new File('gradle.properties').append("\nVAR=" + var)
}
}
从子项目:
task printProperties(){
dependsOn tasks.getByPath(':setProperties')
doLast{
println "Properties: "
println "VAR = $VAR"
}
}
推荐阅读
- ios - 核心数据工具版本增加 - 我是否也应该增加模型版本?
- xcode - Xcode 不会将 Flutter 项目上传到 App Store
- java - 仅序列化编译时信息
- python - 如何按不同的列分组
- python - 如何使用 Tkinter Scale 在 Matplotlib 图表中绑定和显示 Pandas DataFrame 列?
- c - 如何重置 STM32 HAL UART 驱动程序 (HAL) 状态?
- python - 在 Python 中替换 JSON 文件的多个键和值
- php - 如何修复 303 查看 PHP CodeIgniter 中的其他错误
- ionic-framework - 如果应用程序被杀死,(离子)handleNotificationReceived 不会被调用
- sql - 如何使用过滤运行 Row_Number()