从Groovy DSL文件中提取信息?

问题描述 投票:0回答:1

最近,我将logback配置文件从logback.xml切换到了logback.groovy。在这种情况下,将DSL与Groovy结合使用比XML更具通用性。

我需要以编程方式分析此文件,就像我分析以前的XML文件(无数种分析工具中的任何一种一样)。我意识到这将是不完美的,因为DSL配置文件位于它配置并必须执行的对象的顶部,因此其结果不可避免地是动态的,而XML文件是静态的。

如果要在另一个文件中包含一个Groovy文件,则有解决方案。 This one为我工作。

但是我正在努力从结果中找到我需要的东西。

如果我在DSL文件中放置了这样的功能...

def greet(){
  println "hello world"
}

...我不仅可以执行它(如下所示config.greet(),而且我也可以在运行时看到它列出的信息

    GroovyShell shell = new GroovyShell()
    def config = shell.parse( logfileConfigPath.toFile() )
    println "config.class.properties ${config.class.properties}"

但是如果我在DSL文件中放入这样的行...

def MY_CONSTANT = "XXX"

...我不知道如何找到它并获取它的值(config.class.properties的输出混乱而丰富)。

PS打印出config.properties只是给出了这个:

[class:class logback, binding:groovy.lang.Binding@564fa2b]

...,是的,我确实看过config.binding.properties:什么都没有。

parsing groovy logback dsl
1个回答
0
投票

def的使用在脚本的执行过程中创建了一个局部变量,该变量在脚本的绑定中不可用;参见this。即使删除def也不会在绑定中显示MY_CONSTANT,因为通过GroovyShell.parse()解析脚本不会解释/执行代码。

要在config的绑定中显示MY_CONSTANT,请将def MY_CONSTANT = "XXX"更改为MY_CONSTANT = "XXX",然后通过config.run()执行配置脚本。

© www.soinside.com 2019 - 2024. All rights reserved.