【问题标题】:How do I load a .yml property in a Gradle build script?如何在 Gradle 构建脚本中加载 .yml 属性?
【发布时间】:2018-06-27 08:06:29
【问题描述】:

我有具有以下属性的 .yml 文件:

spring:
  application:
    name: auth module
  profiles:
    active: prod

我的 gradle.build 脚本对 jar 任务有这些设置:

jar {
    baseName = 'auth-module-dev'  // `dev` should come from `spring.profiles.active`
    version =  '0.1.2'
}

我想使用命名约定auth-module-%profile_name%.jar 构建jar 文件,其中%profile_name%spring.profiles.active 的值。我该怎么做?

【问题讨论】:

    标签: spring gradle groovy yaml


    【解决方案1】:

    假设您的 yaml 文件的名称为 cfg.yaml

    别忘了在yaml开头加上---

    ---
    spring:
      application:
        name: auth module
      profiles:
        active: prod
    

    build.gradle:

    defaultTasks "testMe"
    
    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath group: 'org.yaml', name: 'snakeyaml', version: '1.19'
        }
    }
    
    def cfg = new org.yaml.snakeyaml.Yaml().load( new File("cfg.yaml").newInputStream() )
    
    task testMe( ){
        doLast {
            println "make "
            println "profile =  ${cfg.spring.profiles.active}"
            assert cfg.spring.profiles.active == "prod"
        }
    }
    

    【讨论】:

    • 我收到一个错误,因为我有多个文档。 * 出了什么问题:评估根项目“amod”时出现问题。 > 预期“阅读器”第 1 行第 1 列中的流中有一个文档:弹簧:^ 但在“阅读器”第 8 行第 1 列中找到了另一个文档:--- ^
    • 当我使用 loadAll 时:没有这样的属性:spring 类:org.yaml.snakeyaml.Yaml$YamlIterable
    • 我忘了 - 只需在 yaml 中添加 --- 作为第一行。检查更新的答案。
    • TNX!我刚刚添加了 first() def cfg = new org.yaml.snakeyaml.Yaml().loadAll(new File("src/main/resources/application.yml").newInputStream()).first()
    • 为了完整起见,我会将结尾的 ... 添加到 YAML 文档中,以便您可以表示结束的时间。因为你可以在同一个文件中有多个 YAML 文档。 yaml.org/refcard.htmlyaml.org/spec/1.2/spec.html#id2760395
    猜你喜欢
    • 2017-09-14
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多