मैं एक जावा webapp परियोजना है कि मैं ग्रहण में विकसित (अधिक सटीक MyEclipse 10) है और का उपयोग कर निर्माण Maven 3.मैवेन बिल्ड के दौरान WAR फ़ाइल में फ़ाइलों को ओवरराइट कैसे करें?
मैं निम्नलिखित लेआउट (केवल मेरी समस्या के लिए प्रासंगिक फ़ाइलों सहित है:
project root
|-- src
| |-- main
| | |-- java
| | |-- resources
| | | |-- log4j.xml
| | | +-- struts.properties
| | |-- webapp
| | | |-- META-INF
| | | | +--context.xml
| | |-- config
| | | |-- test
| | | | |--log4j.xml
| | | | |--struts.properties
| | | | +--context.xml
| | | +-- prod
| | | | |--log4j.xml
| | | | |--struts.properties
| | | | +--context.xml
| +--test
+--pom.xml
जैसा कि आप देख सकते हैं, मैंने कई कॉन्फ़िगरेशन फाइलें शामिल की हैं। जो परियोजना प्रक्षेपण के भीतर उनके उचित स्थान पर हैं, यानी src/main/resources
और src/main/webapp
के अंदर वे हैं जिन्हें मैं नियमित रूप से उपयोग करता हूं जब मैं MyEclipse में काम करता हूं। मैं MyEclipse कनेक्टर का उपयोग कर सकता हूं मेरे देव मशीन पर टॉमकैट उदाहरण जैसे एक तैनाती को स्वचालित रूप से अपडेट करने के लिए। मैं बस "रन सर्वर" पर क्लिक करता हूं और मैं कर सकता हूं बग। वास्तव में इस संदर्भ में मेवेन का उपयोग करने की आवश्यकता नहीं है।
फिर, जब मैं परीक्षण या उत्पादन जैसे किसी अन्य वातावरण के लिए रिलीज बनाना चाहता हूं, तो मैं mvn -P test clean install
चलाता हूं और यह एक अच्छा युद्ध बनाता है।
मेरा लक्ष्य अंतिम WAR के अंदर कॉन्फ़िगरेशन फ़ाइलों को src/config/{environment}/
में प्रतिस्थापित करना है।
मैं अपने pom.xml
में प्रोफाइल की स्थापना की है:
<profiles>
<profile>
<id>test</id>
<properties>
<environment>test</environment>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<environment>prod</environment>
</properties>
</profile>
</profiles>
फिर, मैं युद्ध के अंदर सही स्थान (या अस्थायी फ़ोल्डर के लिए (environment
चर का उपयोग कर) निर्दिष्ट प्रोफ़ाइल से इन संसाधनों को कॉपी करने की कोशिश है कि एक युद्ध में ज़िप किया गया हो जाएगा):
<webResources>
<resource>
<directory>/src/main/config/${environment}</directory>
<targetPath>META-INF/</targetPath>
<includes>
<include>context.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/config/${environment}</directory>
<targetPath>WEB-INF/classes/</targetPath>
<includes>
<include>
struts.properties
</include>
<include>
log4j.xml
</include>
</includes>
</resource>
</webResources>
अब इस काम करने के लिए, सिवाय इसके कि "मानक" संसाधनों इस के बाद निर्देशिका को कॉपी कर रहे हैं लगता है, इसलिए वे इन फ़ाइलों को अधिलेखित। तो मैं हमेशा उदा। कहते हैं से बजाय एक के src/main/resources
से log4j.xml
src/main/configuration/prod/
Maven उत्पादन से निकालें:
[INFO] Processing war project
[INFO] Copying webapp webResources [D:\workspace\MyProject/src/main/config/prod] to [D:\workspaces\SITEL\Webfauna\target\Webfauna]
[INFO] Copying webapp webResources [D:\workspace\MyProject\src/main/config/prod] to [D:\workspaces\SITEL\Webfauna\target\Webfauna]
[INFO] Copying webapp resources [D:\workspace\MyProject\src\main\webapp]
आप अंतिम पंक्ति पर देख सकते हैं, src/main/webapp
से सामान के बाद की नकल की है, इस प्रकार अपने कस्टम फ़ाइलों को अधिलेखित: (
मेरा प्रश्न: कैसे Maven "सक्रिय प्रोफ़ाइल से" फ़ाइलों का उपयोग करने के लिए और किसी तरह "प्राकृतिक" फाइल के ऊपर लिख
जानकारी का शानदार टुकड़ा। मैं सटीक समाधान की तलाश में था और इसे मिला। बहुत बहुत धन्यवाद। –