如何在Grails插件中更新主项目的配置

wes0 2012-08-16

解决该问题的环境:Grails2.1

在Grails插件中更新主项目的配置,主要面临几个小问题:

  • 在什么地方改?
  • 如何引用插件的资源?
  • 如何引用主项目的资源?
  • 如何修改主项目的配置?

1)在什么地方改?

建议的地方包括,插件的_Install.groovy或者自定义的脚本,如:UpdateConfig.groovy

2)如何引用插件的资源?

对于这一点,有两种方案,如果在_Install.groovy中引用,可以通过诸如:

"${pluginBasedir}/src/templates/_frontpage.gsp"

注意这里的"pluginBasedir"这个预定义变量

如果在自定义脚本中引用插件资源,则pluginBasedir已失效了,必须通过${pluginName}PluginDir这个变量来引用,如:

"${ext3scaffoldingPluginDir}/src/templates/_frontpage.gsp"

具体可以参考Grails2.1.0pdf文档的246页

3)如何引用主项目的资源?

这个问题比较简单,通过${basedir}项目即可,如:

config=new File("$basedir/grails-app/conf/Config.groovy")

4)如何修改主项目的配置?

这个问题可以自由发挥,主要通过正则表达式,或者字符串操作来进行

范例:

动态在Config.groovy配置文件中插入json.date的配置

includeTargets << grailsScript("Init")

target(main: "Update the main project config file") {
    config=new File("$basedir/grails-app/conf/Config.groovy")
    if(config.text.contains("grails.converters.json.date = 'javascript'")==false)
    {
        config << """
//3lifestone modify start
grails.converters.json.date = 'javascript'
//3lifestone modify end
"""
        event("StatusUpdate", [ "the main project config is updated"])
    }else{
        event("StatusUpdate", [ "the main project config is already updated"])
    }
}

setDefaultTarget(main)

相关推荐