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

Posted

技术标签:

【中文标题】grails中特定于环境的web.xml?【英文标题】:Environment-specific web.xml in grails? 【发布时间】:2011-08-18 20:10:06 【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

【参考方案1】:

您可以使用“WebXmlEnd”事件的事件处理程序创建scripts/_Events.groovy,一旦 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 

【讨论】:

【参考方案2】:

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

首先安装模板

grails install-templates

然后自定义web.xml,您将在src/templates/war/web.xml 中找到。我选择制作web_dev.xmlweb_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;

祝你好运!

【讨论】:

这很好用。我没有使用"$System.getProperty('grails.env')",而是从 Grails 2.2.0 中的grails.util.Environment.getCurrent().getName() 阅读【参考方案3】:

我从未尝试过,但是应该可以根据当前环境在BuildConfig.groovy 中指定grails.config.base.webXml 参数。

有一个list of available BuildConfig settings here


编辑

实际上,due to this issue,这不是前进的方向 :-( 可能像这样传递属性:

grails -Dgrails.config.base.webXml=/path/to/web.xml

一切皆有可能吗?

【讨论】:

以上是关于grails中特定于环境的web.xml?的主要内容,如果未能解决你的问题,请参考以下文章

Webpack 中特定于页面的 JavaScript 以及第三方脚本和应用程序范围的脚本

我可以关闭 web.xml 中的 HttpSession 吗?

在没有插件 web.xml 问题的情况下配置 Spring Security

使用“gradle test”测试 Grails 3 应用程序使用错误的环境配置

在 web 应用程序中使用 c# windows 应用程序项目

Apache Tomcat 应用程序的默认会话超时