"Война" вызов Грааля, не передающий дополнительные свойства Gradle - PullRequest
0 голосов
/ 01 ноября 2019

При вызове команды "grails war" свойство grails.env передается Gradle, но любое другое свойство, которое я определяю с помощью -D, не передается.

Я проверил, что Gradle получитсвойства, и я могу напечатать их с помощью команды вроде "gradle -Dgrails.env = development -Dfoo.bar = blech"

Вызов grails с помощью этой команды:

grails -Dgrails.env =development -Dfoo.bar = blech war build.gradle:

ext {
    currentBuildEnvironment = System.properties['grails.env']
    println "Current build environment is ${currentBuildEnvironment}"
    fooBar = System.properties['foo.bar']
    println "fooBar: ${fooBar}"
}

Это правильно печатает «development» для currentBuildEnvironment, но печатает ноль для fooBar.

1 Ответ

0 голосов
/ 04 ноября 2019

По умолчанию вы не можете передавать пользовательские свойства в команду grails.

Из Документация командной строки Grails :

Команда grailsфронт к вызову gradle, из-за этого могут быть неожиданные побочные эффекты. Например, при выполнении grails -Dapp.foo = bar run-app системное свойство app.foo не будет доступно вашему приложению. Это потому, что bootRun в вашем build.gradle настраивает системные свойства. Для этого вы можете просто добавить все свойства System.properties к bootRun в build.gradle, например:

bootRun{
   systemProperties System.properties // Please note not to use '=', because this will > override all configured systemProperties. This will append them.
}

и использовать в своем скрипте для извлечения любых пользовательских свойств:

ext {
    fooBar = bootRun.systemProperties['foo.bar']
    println "fooBar: ${fooBar}"
}

Кроме того, вы можете передать ограниченный набор свойств на основе префикса:

bootRun{
    systemProperties System.properties.inject([:]){acc,item-> item.key.startsWith('foo.')?acc << [(item.key.substring('foo.'.length())):item.value]:acc }
}

И просто получить свойство без префикса:

ext {
    fooBar = bootRun.systemProperties['bar']
    println "fooBar: ${fooBar}"
}

Вы можете играть с передачей свойств в bootRun section:

systemProperties System.properties.inject([:]){acc,item-> item.key.startsWith('foo.')?acc << [(item.key):item.value]:acc }

будет иметь все свойства, начиная с 'foo' и с суффиксом:

bootRun.systemProperties['foo.bar']
...