我想修改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/