Генерация нескольких задач Gradle Tar в зависимости от результата предыдущей задачи - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть ощущение, что ответ на этот вопрос "это невозможно", но я решил, что все равно спрошу.

Допустим, у меня есть задача, которая генерирует произвольное количество каталогов (т.е. я не буду знать во время сборки, сколько каталогов могло быть сгенерировано):

task makeSampleFiles {
    doLast {
        mkdir 'build/a'
        mkdir 'build/b'
        ...
        file('build/a/a.out').text = 'a'
        file('build/b/b.out').text = 'b'
        ...
    }
}

Я хотел бы создать задачу Tar для каждого из найденных каталогов. Например:

fileTree("build/").visit {
    if (it.isDirectory()) {
        def variant = it.name
        def t = tasks.create(name: "generateTar${variant}", type: Tar) {
            from "./build/${variant}/"
            baseName = "dist-${variant}"
        }
    }
}

Проблема в том, что, похоже, я могу создавать эти задачи только во время настройки. В этот момент makeSampleFiles еще не запущен, поэтому нет файлов.

Есть ли способ генерировать и запускать задачи на этапе выполнения Gradle? Или любой другой способ создания произвольного числа TAR на этапе выполнения, аналогично тому, как вы можете иметь несколько copy{} спецификаций в doLast?

1 Ответ

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

На самом деле невозможно создавать и добавлять задачи на этапе выполнения, но, как обсуждалось в комментариях выше, если вам не нужно создавать несколько задач (по одной для каждой папки / архива для создания), то вы можете реализовать это с одной задачей, которая будет перебирать другие каталоги, и создавать архив tar для каждого.

Нечто подобное будет работать:

// your initial task which creates the directories
task makeSampleFiles {
    doLast {
        mkdir 'build/pkg/a'
        mkdir 'build/pkg/b'
        // ....
        file('build/pkg/a/a.out').text = 'a'
        file('build/pkg/b/b.out').text = 'b'
    }
}

// the task responsible to create tar archives
task makeTarAchives {
    dependsOn makeSampleFiles
    doLast {
        fileTree("build/").visit {
            if (it.isDirectory()) {
                def variant = it.name
                ant.tar(destfile: "build/dist-${variant}.tar", basedir: "build/$variant")
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...