2011-05-04 50 views

回答

15

您可以創建scripts/_Events.groovy帶有事件處理程序,用於一旦Grails和插件完成其更改後觸發的'WebXmlEnd'事件。更新與普通搜索XML /通過解析XML更換或通過DOM方法並寫出更新的文件:

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 } 
} 
0

我從來沒有嘗試過,但它應該可以指定參數在BuildConfig.groovy依賴於當前的環境。

有一個list of available BuildConfig settings here


編輯

其實,due to this issue,這不是前進的道路:-(也許傳遞特性,如:

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

是所有的可能?

8

這裏這就是我使用,從傢伙在上death-head.ch

解決方案

先安裝模板

grails install-templates 

然後自定義web.xml你會發現在src/templates/war/web.xml。我選擇了製作一個web_dev.xml和一個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; 
} 

祝你好運!

+0

這很好。在Grails 2.2.0中,我從'grails.util.Environment.getCurrent()。getName()'中讀取''{$ System.getProperty('grails.env')}而不是' – Alex 2013-09-23 17:10:11