grails中特定于环境的web.xml?

Ste*_*all 9 grails groovy spring tomcat

web.xml在grails中构建特定于环境的条目的最佳方法是什么?

我需要对生产进行一些修改,因为它们会破坏本地运行.

有什么想法吗?

Bur*_*ith 15

您可以scripts/_Events.groovy使用事件处理程序创建"WebXmlEnd"事件,该事件在Grails和插件完成更改后触发.通过解析XML并写出更新的文件,使用普通搜索/替换或通过DOM方法更新XML:

import grails.util.Environment

eventWebXmlEnd = { String filename ->

   if (Environment.current != Environment.PRODUCTION) {
      return
   }

   String content = webXmlFile.text

   // update the XML
   content = ...

   webXmlFile.withWriter { file -> file << content }
}
Run Code Online (Sandbox Code Playgroud)


Tak*_*Tak 8

这是我正在使用的解决方案,来自death-head.ch的人

首先安装模板

grails install-templates
Run Code Online (Sandbox Code Playgroud)

然后定制web.xml你会发现的src/templates/war/web.xml.我选择制作a web_dev.xml和a web_prod.xml并删除web.xml.我想web_prod.xml包含一个安全约束块.无论如何...

将以下内容放入BuildConfig.groovy:

// #########################################################
// ## Can't use environment switching block because BuildConfig doesn't support it.
// ##    @url http://jira.grails.org/browse/GRAILS-4260
// ## So use this workaround:
// ##   @url http://death-head.ch/blog/2010/09/finally-solved-the-base-authentication-in-grails/
// #########################################################

switch ("${System.getProperty('grails.env')}") {
  case "development":
    if (new File("/${basedir}/src/templates/war/web_dev.xml").exists()) {
        grails.config.base.webXml = "file:${basedir}/src/templates/war/web_dev.xml"
    }
    break;
  default:
    if (new File("/${basedir}/src/templates/war/web_prod.xml").exists()) {
        grails.config.base.webXml = "file:${basedir}/src/templates/war/web_prod.xml"
    }
    break;
}
Run Code Online (Sandbox Code Playgroud)

祝好运!