2012-03-21 7 views
21

के साथ ग्रहण में काम नहीं करते हैं। मैं मेवेन फ़िल्टरिंग का उपयोग कर स्प्रिंग कॉन्फ़िगरेशन फ़ाइल को फ़िल्टर करने का प्रयास कर रहा हूं। मेरे पोम इस तरह कॉन्फ़िगर किया गया है:मैवेन वॉर प्लगइन के साथ फ़िल्टर करने वाले वेब संसाधन एम 2e

 ... 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.2</version> 
      <configuration> 
      <webResources> 
       <resource> 
       <filtering>true</filtering> 
       <targetPath>WEB-INF/context</targetPath> 
       <directory>src/main/webapp/WEB-INF/context</directory> 
       <includes> 
        <include>applicationContext.xml</include> 
       </includes> 
       </resource> 
      </webResources> 
      </configuration> 
     </plugin> 
     ... 

और

<profiles> 
    <profile> 
     <id>desarrollo</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <build> 
      <filters> 
       <filter>src/main/properties/dev.properties</filter> 
      </filters> 
     </build> 
    </profile> 
    <profile> 
     <id>pruebas</id> 
     <build> 
      <filters> 
       <filter>src/main/properties/test.properties</filter> 
      </filters> 
     </build> 
    </profile> 
      ... 

यह बहुत अच्छा काम करता है जब Maven सीधे लागू।

दुर्भाग्यवश, जब एक्लिप्स डब्ल्यूटीपी और एम 2 के साथ टॉमकैट 6 में वेबपैप को गर्म-तैनाती करते हैं तो यह हमेशा applicationContext.xml के unfiltered संस्करण को चुनता है। (फ़ाइल लक्ष्य/m2e-wtp/वेब-संसाधन/वेब-आईएनएफ/संदर्भ में फ़ाइल applicationContext.xml कभी फ़िल्टर नहीं किया जाता है)

मुझे इस विषय पर कोई उपयोगी दस्तावेज नहीं मिल रहा है। मुझे यह भी यकीन नहीं है कि यह एम 2 ई में लागू किया गया है या नहीं।

क्या मेरी कॉन्फ़िगरेशन में कुछ गड़बड़ है या यह एक अनुपूरक सुविधा है?

+0

सबसे आदर्श समाधान में है http://stackoverflow.com/questions/1782352/filtering-maven-files-into-web-inf –

उत्तर

24

ठीक है, आखिरकार मुझे यह मिला।

सबसे पहले, मैंने किया था कि खम्बाइज़ ने क्या बताया। मैंने संसाधन फ़ोल्डर में applicationContext.xml स्थानांतरित कर दिया। युद्ध प्लगइन वेब स्रोत बाहरी संसाधनों के साथ काम करने के लिए हैं, और गंतव्य फ़ोल्डर में फ़ाइल को फ़िल्टर करना सबसे अच्छा अभ्यास नहीं था। मैं नया विन्यास को प्रतिबिंबित करने के पोम अद्यतन

<resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
     </resource> 
    </resources> 

और

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.2</version> 
      <configuration> 
       <webResources> 
        <resource> 
         <filtering>true</filtering> 
         <targetPath>WEB-INF/context</targetPath> 
         <directory>src/main/resources/WEB-INF/context</directory> 
         <includes> 
          <include>applicationContext.xml</include> 
         </includes> 
        </resource> 
       </webResources> 
      </configuration> 
     </plugin> 

तो, उसके लिए ऋण का आधा। लेकिन यह पर्याप्त नहीं था, फिर भी यह काम नहीं किया। मुझे एहसास हुआ कि मेवेन/एम 2 वास्तव में मेरी फाइल को फ़िल्टर कर रहा था, लेकिन मुझे मेरी परिभाषित गुण फाइलें नहीं मिलीं। कुछ परीक्षणों के बाद मुझे पता चला कि m2e प्रोफाइल सक्रियण अनुभाग में विकल्प को अनदेखा कर रहा है।

तो, मैं परियोजना Maven विन्यास को मेरी डिफ़ॉल्ट प्रोफ़ाइल जोड़ा और फिर इसे

enter image description here

+0

डिफ़ॉल्ट प्रोफ़ाइल की स्थापना मेरे लिए चाल किया था। पुर्तगाली में – Rainer

1

क्या आपने संसाधनों को किसी भी डिफ़ॉल्ट मेवेन स्थान में कॉन्फ़िगरेशन के बजाय संसाधन क्षेत्र को filter the resources पर संसाधन/कॉन्फ़िगर करने के बजाय संसाधन/मुख्य/संसाधन/WEB-INF/... के अंतर्गत संसाधनों को रखने की कोशिश की है।

+0

क्या आप आगे बढ़ applicationContext.xml या विन्यास फाइल मतलब है? पहले मामले में, मुझे लगता है कि मैं इसे कर सकता हूं, लेकिन ¿मैं मैवेन को फ़ाइल को सही लक्ष्य पथ पर कॉपी करने के लिए कैसे कहूं? इसके अलावा, मेरी मुख्य स्प्रिंग कॉन्फ़िगरेशन फ़ाइल प्रोजेक्ट में इसके अनुमानित स्थान पर नहीं होगी, और यह सहज नहीं है। दूसरे मामले में, मैं कोल्यूड अपनी कॉन्फ़िगरेशन फ़ाइलों को वहां ले जाता हूं, लेकिन तब उन फ़ाइलों को लक्षित युद्ध में कॉपी किया जाएगा, है ना?और है कि मैं क्या चाहते हैं नहीं है –

+0

फिल्टर फ़ाइलों उदाहरण src/मुख्य/फिल्टर के लिए src/मुख्य/संसाधनों की तुलना में एक अन्य फ़ोल्डर में स्थित हो सकता है (जो गुण Maven छानने, वे क्रम में आवश्यकता नहीं होती के लिए ही हैं)? इसके अलावा applicationContext.xml को src/main/resource/WEB-INF/.. में स्थित होना चाहिए? – khmarbaise

7

मैं web.xml छानने के साथ एक समान समस्या थी काम किया। मैंने पूरे प्रोजेक्ट को ग्रहण में पुनः आयात करके समस्या हल की।

कारण भ्रष्ट /.settings/org.eclipse.wst.common.component फ़ाइल था। इस फ़ाइल में निर्देशिका को तैनात स्थानीय वेब सर्वर पर कॉपी की गई फ़ाइलों का क्रम परिभाषित किया गया है। उदाहरण के लिए:

<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0"> 
    <wb-module deploy-name="liquidvote-rest"> 
    <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/> 
    <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> 
    <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> 
    <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> 
    <property name="context-root" value="myapp"/> 
    <property name="java-output-path" value="/myapp/target/classes"/> 
    </wb-module> 
</project-modules> 

web.xml या application.xml कई निर्देशिका में मौजूद है यह पहली बार निर्देशिका खोजी से ले जाया जाएगा। इसलिए यह महत्वपूर्ण है कि

<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/> 

पहली प्रविष्टि है।

आपको "वेबसाइम फ़ोल्डर क्या है?" अनुभाग में http://wiki.eclipse.org/M2E-WTP_FAQ पर अधिक जानकारी मिलेगी

0

मुझे अभी भी एक ही समस्या थी। मेरा समाधान सुरुचिपूर्ण नहीं है और मुझे इस पर गर्व नहीं है, लेकिन मान लें कि यह स्वीकार्य है। मेरे मामले में मेरे पास स्वैगर एप्लिकेशन (टेस्टर्स के लिए हमारे एपीआई का परीक्षण करने के लिए) के साथ एक वसंत बूट एमवीसी एप्लीकेशन है। बात यह है कि हम इस ऐप का दो वातावरण में उपयोग कर रहे हैं, इसलिए मैंने दो प्रोफाइल बनाए - देव और टेस्ट। देव env में हम ग्रहण से आवेदन को "जैसे" चलाएं, इसलिए संदर्भ पथ खाली है (मुझे पता है कि इसे वसंत जावा कॉन्फ़िगरेशन में सेट किया जा सकता है, लेकिन यह एकमात्र प्लेसहोल्डर नहीं है जिसे हम स्विच करना चाहते हैं) और परीक्षण env एप्लिकेशन टॉमकैट के हमारे अनुकूलित संस्करण में चलाया जाता है ... इसलिए संदर्भ पथ युद्ध फ़ाइल नाम के समान है।

और यहां समस्या है - स्वैगर इस संदर्भ पथ पर आराम दस्तावेज़ कह रहा है और यह वसंत प्रोफ़ाइल पर निर्भर करता है। तो हमारे पास एक वेब संसाधन है जिसे फ़िल्टर करने की आवश्यकता है।

... 
<build> 
<plugins> 
<plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <configuration> 
        <webResources> 
         <resource> 
          <filtering>true</filtering> 
          <directory>src/main/webapp</directory> 
          <includes> 
           <include>**/scripts.js</include> 
          </includes> 
         </resource> 
        </webResources> 
       </configuration> 
      </plugin> 
... 

यह काम कर रहा था, लेकिन जार यह ग्रहण से "के रूप में रन" के साथ काम नहीं कर रहा था केवल ग्रहण बिल्ला में या कमांडलाइन जावा से एम्बेडेड में चलाएँ: पहले तो मुझे m2e-डब्ल्यूटीपी फ़िल्टरिंग का उपयोग करने की कोशिश की।

संसाधन फ़िल्टर किया गया था और मैंने उन्हें लक्ष्य में वेब संसाधन में देखा, लेकिन ग्रहण सीधे स्रोत कोड पर चल रहा है या एक प्रतिलिपि बना रहा है जिसे मैं नहीं जानता ... यह फ़िल्टर किए गए संसाधन नहीं देख सकता ... इसलिए मैंने सोचा कि यह है कि मैं कुछ इस तरह कर देगा:

<resources> 
      <resource> 
       <directory>src/main/resources</directory> 
      </resource> 
      <resource> 
       <filtering>true</filtering> 
       <directory>src/main/resources/webapp/swagger</directory> 
       <targetPath>${basedir}/src/main/webapp/swagger</targetPath> 
       <includes> 
        <include>scripts.js</include> 
       </includes> 
      </resource> 
     </resources> 

यह सबसे भाग्यशाली समाधान नहीं है, क्योंकि यह कोड और नहीं लक्ष्य modifing है, लेकिन कम से कम यह काम कर रहा है। अगर किसी को कोई सुझाव होगा कि इसे कोड संशोधनों के बिना कैसे काम करना है, तो मैं आभारी रहूंगा।

0

मैंने सफलता के बिना ऊपर वर्णित सब कुछ करने की कोशिश की है। फ़ाइलों को फ़िल्टर किया गया था और "m2e-wtp" फ़ोल्डर में सही ढंग से जेनरेट किया गया था, लेकिन किसी कारण से ग्रहण "लक्ष्य/कक्षाओं" से फ़ाइलों की प्रतिलिपि बना रहा था।

इस प्रकार, मैंने अपना pom.xml बदल दिया है, गंतव्य फ़ोल्डर को "m2e-wtp" से "लक्ष्य/कक्षाओं" में बदलकर कोड को बदल दिया है।

महत्वपूर्ण: हर बार जब आपको प्रोजेक्ट पर मेवेन बिल्ड चलाने की आवश्यकता होती है, तो आपको प्रोजेक्ट बनाने के लिए पोम बदलना होगा।

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
     <failOnMissingWebXml>false</failOnMissingWebXml> 
     <filters> 
      <filter>${project.basedir}/src/main/filters/${build.profile.id}/config.properties</filter> 
     </filters> 
     <webResources> 
      <resource> 
       <filtering>true</filtering> 
       <directory>${project.basedir}/src/main/resources</directory> 
       <targetPath>${project.basedir}/target/classes</targetPath> 
       <includes> 
        <include>*.properties</include> 
        <include>*.xml</include> 
        <include>META-INF/spring/*.xml</include> 
       </includes> 
      </resource> 
     </webResources> 
    </configuration> 
</plugin> 
+0

Ty: मैं मेरे लिए कोई काम सभी प्रश्नों के उत्तर की कोशिश की। फ़ाइलों फ़िल्टर और "m2e-डब्ल्यूटीपी" में सही ढंग से उत्पन्न लेकिन किसी कारण से ग्रहण अभी भी फ़िल्टर किए गए फ़ाइलों को सीधे "लक्ष्य/वर्गों" से उठा रहे थे। यह लंगेज क्या है? – VedX

0

आज मुझे इसी तरह की समस्या थी जब युद्ध में कई जार शामिल किए गए थे। मैंने फ़िल्टरिंग सेट की है, और फ़िल्टर किए गए मूल जार की तुलना की है। वे समान दिखते हैं, लेकिन यह सच नहीं है। मैंने जार को ज़िप करने का नाम बदलने की कोशिश की और मैं जार (ज़िप) के अंदर दूषित संरचना के कारण सामग्री को अनपैक करने में सक्षम नहीं था, जबकि मूल एक ठीक था। यह भी उल्लेख किया गया है adding filtering web resources कहां कहा जाता है कि फ़िल्टरिंग को अपनी बाइनरी फ़ाइलों को दूषित करने से रोकने के लिए झूठा सेट करना होगा।

संबंधित मुद्दे