首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Groovy ConfigSlurper:如何修改配置中的闭包?

Groovy ConfigSlurper:如何修改配置中的闭包?
EN

Stack Overflow用户
提问于 2014-08-06 17:17:02
回答 2查看 578关注 0票数 2

我想修改一个grails BuildConfig.groovy:

代码语言:javascript
运行
复制
grails.project.dependency.resolution = {
    plugins {
        build ":tomcat:7.0.50"

        // plugins for the compile step
        compile ":scaffolding:2.0.1"
        compile ':cache:1.1.1'

        // plugins needed at runtime but not for compilation
        runtime ":hibernate:3.6.10.7" // or ":hibernate4:4.1.11.6"
        runtime ":database-migration:1.3.8"
        runtime ":jquery:1.10.2.2"
        runtime ":resources:1.2.1"
    }
}

尤其是我想添加一个插件并修改另一个插件。

我用ConfigSlurper试过了

代码语言:javascript
运行
复制
def conf = new ConfigSlurper().parse(new File(buildConfig).toURL())
def plugins = conf.grails.project.dependency.resolution 
println "found plugins: $plugins"
plugins.each {
    println it
}

conf.grails.project.dependency的访问运行良好,但conf.grails.project.dependency.resolution是一个闭包,我不知道如何访问甚至修改这一部分。

EN

回答 2

Stack Overflow用户

发布于 2014-08-07 20:05:33

我对grails的了解还不足以做出一些自以为是的猜测,但在我看来,这个配置文件并不符合ConfigSlurper expected syntax。如果您想要解析的内容不是很长,您可以尝试自己截取它:

代码语言:javascript
运行
复制
class PluginConfig {
  def compileLibs = []
  def runtimeLibs = []
  def version

  def build(version) { this.version = version } 
  def compile(lib) { compileLibs << lib }
  def runtime(lib) { runtimeLibs << lib }
}


def conf = new ConfigSlurper().parse(new File("BuildConfig.groovy").toURL())
def plugins = conf.grails.project.dependency.resolution

def lib = new PluginConfig()

plugins.delegate = lib // magick!!
plugins()

assert lib.compileLibs == [":scaffolding:2.0.1", ':cache:1.1.1']
assert lib.runtimeLibs == [
    ":hibernate:3.6.10.7", 
    ":database-migration:1.3.8", 
    ":jquery:1.10.2.2", 
    ":resources:1.2.1"
]
assert lib.version == ":tomcat:7.0.50"

不过,不知道如何在更改后(很容易)将其重写到文件中。也许使用Grails自己的配置解析器可能是一个更好的想法;它在解析文件时必须具有配置的表示。

票数 2
EN

Stack Overflow用户

发布于 2014-08-06 21:03:58

据我所知,没有完美的方法可以做到这一点:所有可用的解析器/slurpers都会删除配置的注释。因此,即使您修改了config slurper的结果并将其写回,它也不会是您想要的结果。

您还必须考虑到,人们可能会将变量用于版本号和其他意想不到的东西。

所以我想修改配置的最好方法是使用一些正则表达式,并希望您的用户有一个标准的配置……

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25156518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档