【问题标题】:Grails "war" invocation not passing extra properties to GradleGrails“战争”调用未将额外属性传递给 Gradle
【发布时间】:2019-11-01 19:15:56
【问题描述】:

当调用“grails war”命令时,grails.env 属性被传递给 Gradle,但我用 -D 定义的任何其他属性都没有被传递。

我已验证 Gradle 将获取属性,我可以使用“gradle -Dgrails.env=development -Dfoo.bar=blech”之类的命令打印它们

使用此命令调用 grails:

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

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

这会正确地为 currentBuildEnvironment 打印“development”,但为 fooBar 打印 null。

【问题讨论】:

    标签: gradle grails groovy


    【解决方案1】:

    默认情况下,您不允许将自定义属性传递给grails 命令。

    来自Grails Command Line documentation

    grails 命令是 gradle 调用的前端,因此 可能会有意想不到的副作用。例如,当执行 grails -Dapp.foo=bar run-app app.foo 系统属性不会 可用于您的应用程序。这是因为你的 bootRun build.gradle 配置系统属性。为了使这项工作你 可以简单地将所有 System.properties 附加到 build.gradle 中的 bootRun 喜欢:

    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 部分中使用传递属性:

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

    将具有从 'foo' 开始并带有后缀的所有属性:

    bootRun.systemProperties['foo.bar']
    

    【讨论】:

    • 我尝试了这种方法,但它不起作用: > 任务:compileGroovy FAILED FAILURE:构建失败并出现异常。 * 出了什么问题:任务 ':compileGroovy' 执行失败。 > 无法推断 Groovy 类路径,因为在类路径上找不到 Groovy Jar:
    • @tkmilbaugh 如果您需要帮助,您可能需要非常明确地说明“不起作用”实际上是什么......
    • @tkmilbaugh 你的编译错误可能与stackoverflow.com/questions/49120352/…有关
    • @Andriy Budzinskyy 这解决了最初的问题,但现在我得到:```> 任务:compileGroovy FAILED FAILURE:构建失败并出现异常。 * 出了什么问题:任务 ':compileGroovy' 执行失败。 > org/grails/io/support/Resource * 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪..... ``` 该错误实际上并未描述 org.grails.io.support 出了什么问题。资源,我相信这是 Grails 的标准部分。
    • @tkmilbaugh 添加bootRun 部分时您是否看到这些错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2016-09-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    相关资源
    最近更新 更多