grails - Groovy ConfigSlurper : how to modify a closure in a config?

标签 grails groovy

我想修改grails BuildConfig.groovy:

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尝试过:

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 是一个闭包,我不知道如何访问甚至修改此部分。

最佳答案

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

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 自己的配置解析器可能是一个更好的主意;它在解析文件时必须具有配置的表示。

关于grails - Groovy ConfigSlurper : how to modify a closure in a config?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25156518/

相关文章:

java - groovy (grails) 会给你像 java 一样的编译时检查吗?

java - Grails 属于,我应该吗?

grails - GORM 继承列定义映射

mongodb - 如何使用InsideCircle和另一个术语查询MongoDB?

grails - Grails-如何将参数从另一个 Controller 保存到 Controller

groovy - Jira 工作流脚本验证器的返回码

Groovy 编译时 AST 转换 : Assignment to a field

grails - 有没有一种简单的方法可以从 Grails 中的远程服务器获取 JSON 数据集?

google-app-engine - Maven + Grails + 应用引擎

jquery - 如何删除浏览器上的空TD