2011-05-04 13 views
9

पर्यावरण-विशिष्ट web.xml grails में प्रविष्टियों को बनाने का सबसे अच्छा तरीका क्या है?पर्यावरण-विशिष्ट web.xml grails में?

मुझे केवल उत्पादन के लिए कुछ संशोधन करने की आवश्यकता है, क्योंकि वे स्थानीय रूप से चलते हैं।

कोई विचार?

उत्तर

15

आपबना सकते हैं'WebXmlEnd' ईवेंट के लिए इवेंट हैंडलर के साथ जिसे Grails और प्लगइन्स ने अपने परिवर्तन करने के बाद निकाल दिया है। अद्यतन सादे खोज के साथ एक्सएमएल/बदलने के लिए या डोम विधियों के माध्यम से 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 } 
} 
0

मैं इसे करने की कोशिश कभी नहीं किया है, लेकिन यह 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 

सब संभव है कि है

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

यह अच्छी तरह से काम करता है। '" $ {System.getProperty ('grails.env')} का उपयोग करने के बजाय "मैं' grails.util.Environment.getCurrent() से पढ़ता हूं। Grails 2.2.0 में getName() ' – Alex