Gradle - командная строка для каждого - PullRequest
0 голосов
/ 12 июня 2019

У меня есть следующий код, но в строке commandLine вызывается только последний элемент из configFilesPath.

Любые идеи о том, что мне следует использовать - так что он запускает commandLine для каждого изэлементы в configFilesPath?

@TaskAction
fun create() {
    project.exec({
        workingDir(project.projectDir)

        var configFilesPath = Paths.get(System.getProperty("user.dir"), "../../../", "myconfig/");
        //Create symlinks for all files in myconfig/
        Files.list(configFilesPath).forEach{
            val configFile = configFilesPath.toString() + "/" + it.fileName
            commandLine("ln", "-s", configFile)
        }
    })

}

Спасибо.

1 Ответ

1 голос
/ 12 июня 2019

См. ExecSpec : когда вы пишете commandLine("ln", "-s", configFile), вы фактически вызываете свойство commandLine setter ; если вы заключите этот вызов в цикл forEach, будет использовано только последнее значение (это то, что вы заметили). Фактически у задачи Exec может быть только один commandLine.

В вашем случае вы можете заключить вызов project.exec( {...}) в блок forEach, чтобы инициировать один вызов exec для каждого файла конфигурации.

Что-то подобное должно работать (код не протестирован, возможно, вам придется немного адаптироваться):

@TaskAction
fun create() {

    var configFilesPath = Paths.get(System.getProperty("user.dir"), "../../../", "myconfig/");
    // Iterate over all files in myconfig/
    Files.list(configFilesPath).forEach{
        val configFile = configFilesPath.toString() + "/" + it.fileName
        project.exec({
            workingDir(project.projectDir)
            commandLine("ln", "-s", configFile)
        })
    }
}

Примечание Вы также должны сконфигурировать свою задачу в блоке doLast { }.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...