Gradle: найти и собрать все проекты в папке - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть папка с множеством проектов внутри (слишком много для того, чтобы вручную писать для них файлы сборки)

Проекты в основном находятся в плоском макете:

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

Номожет быть вложен, как показано выше, и мне нужно учитывать это.

В идеале должно произойти следующее:

  • Я могу запустить user@user:/root gradle build и каждый проект вкаталог должен быть собран, если он содержит файл сборки gradle

  • , если сборка не удалась, просто продолжите со следующей

Как я могусделать это возможным?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Я придумала рабочее решение:

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 дает аккуратный отчет обо всех неудачных сборках.

0 голосов
/ 23 ноября 2018

Как насчет этого однострочного (не проверено):

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...