我有一个文件夹,其中包含很多项目(太多内容无法手动为其编写构建文件)
项目大多采用平面布局:
root
-project 1
-project 2
-project 3
-project 4
-project 5
( -project 5.1)
但是可以如上图所示进行嵌套,我需要考虑这一点。
理想情况下,应该发生以下情况:
我可以运行user@user:/root gradle build
,并且只要包含gradle构建文件,就应该构建目录shoudl中的每个项目
如果构建失败,只需继续下一个
我怎样才能做到这一点?
答案 0 :(得分:0)
这种单线(未经测试)如何?
find . -maxdepth 1 -type d \( ! -name . \) -exec bash -c "cd '{}' && gradle build || true" \;
或者,更冗长:
dirs=($(find . -type d))
for dir in "${dirs[@]}"; do
cd "$dir"
gradle build || true
done
答案 1 :(得分:0)
我想出了一个可行的解决方案:
def flist = []
// change to you workspace name
new File('./Workspace').eachDir {
//blacklist any folders you want
if (it.name !='.gradle' && it.name != 'master' && it.name!= 'Build-All') {
flist << it.name
}
}
// build task objects
flist.each { folder ->
task "${folder}"(type: GradleBuild) {
buildFile = "./Workspace/"+ folder + "/build.gradle"
dir = './' + folder
tasks = ['build']
}
}
// create super task
task (all, dependsOn: flist) {
}
您需要在根目录中这样调用它:gradle :all --continue
,这样做的好处是,任何失败的项目构建都不会停止其他构建。
另一个好处是gradle可以为所有失败的构建提供清晰的报告。