Gradle:在文件夹中查找并构建所有项目

时间:2018-11-22 10:08:18

标签: gradle build

我有一个文件夹,其中包含很多项目(太多内容无法手动为其编写构建文件)

项目大多采用平面布局:

root
    -project 1
    -project 2
    -project 3
    -project 4
    -project 5
    (    -project 5.1)

但是可以如上图所示进行嵌套,我需要考虑这一点。

理想情况下,应该发生以下情况:

  • 我可以运行user@user:/root gradle build,并且只要包含gradle构建文件,就应该构建目录shoudl中的每个项目

  • 如果构建失败,只需继续下一个

我怎样才能做到这一点?

2 个答案:

答案 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可以为所有失败的构建提供清晰的报告。