Maven

2012-05-31 21 views
7

में एक युद्ध ओवरले के अंदर संशोधित करना संसाधनों मैं इस सेटअप वर्तमान में है। हम कॉन्फ़िगरेशन के एक टिप्पणी अनुभाग के साथ इसे वितरित कर रहे हैं जो किसी विशेष वातावरण में प्रोजेक्ट को तैनात किए जाने पर मैन्युअल रूप से असम्बद्ध हो जाता है।Maven

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

दोनों परियोजनाओं (दोहरी रखरखाव) में फ़ाइल मौजूद होने की बजाय, मुझे उम्मीद थी कि मैं प्रोजेक्ट बी प्रोजेक्ट ए (युद्ध ओवरले के माध्यम से) पर निर्भर हो सकता हूं, और उसके बाद मेवेन-कॉन्फिग-प्रोसेसर-प्लगइन का उपयोग करने के लिए WEB-INF/web.xml के लिए विशेष कॉन्फ़िगरेशन, फिर युद्ध फ़ाइल को फिर से पैकेज करें।

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

इंटर्ननेट पर कई लोगों ने पिछले कुछ सालों से पूछा है कि "ओवरले अनपैक" और "युद्ध फ़ाइल को दोबारा" के बीच प्लगइन लगाने का कोई तरीका है, लेकिन किसी ने भी यह निश्चित रूप से उत्तर दिया है मार्ग। कोई विचार?

उत्तर

5

चूंकि युद्ध के ओवरले और युद्ध पैकेजिंग सभी एक ही लक्ष्य के हिस्से के रूप में होने लगते हैं, मुझे नहीं लगता कि इसके बीच में जाने का एक तरीका है। एक कामकाज के रूप में, आप पहले चरण में web.xml निकाल सकते हैं और इसे संसाधित कर सकते हैं। प्रोजेक्ट बी से web.xml को प्रोजेक्ट ए से कार्य निर्देशिका में निकालने के लिए प्रोजेक्ट बी में मेवेन-निर्भरता-प्लगइन का उपयोग किया जा सकता है, फिर web.xml पर मेवेन-कॉन्फिग-प्रोसेसर-प्लगइन चलाएं और परिणाम कहीं और रखें, फिर मेवेन-वॉर-प्लगइन को शामिल करने के लिए निर्देश दें जिसने ओवरले से पहले web.xml संसाधित किया। परियोजना बी के पोम में:

<plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>2.4</version> 
     <executions> 
      <!-- Extract web.xml from Project A --> 
      <execution> 
       <id>unpack-webxml</id> 
       <phase>generate-resources</phase> 
       <goals> 
        <goal>unpack</goal> 
       </goals> 
       <configuration> 
        <artifactItems> 
         <artifactItem> 
          <groupId>your.group</groupId> 
          <artifactId>project.a</artifactId> 
          <version>...</version> 
          <type>war</type> 
          <overWrite>true</overWrite> 
          <outputDirectory>${project.build.directory}/myconfig/work</outputDirectory> 
          <includes>WEB-INF/web.xml</includes> 
         </artifactItem> 
        </artifactItems> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
    <plugin> 
     <groupId>com.google.code.maven-config-processor-plugin</groupId> 
     <artifactId>maven-config-processor-plugin</artifactId> 
     <version>2.0</version> 
     <executions> 
      <!-- Process extracted web.xml and place in temp build directory --> 
      <execution> 
       <id>process-webxml</id> 
       <goals> 
        <goal>process</goal> 
       </goals> 
       <configuration> 
        <outputDirectory>${project.build.directory}/myconfig/build</outputDirectory> 
        <transformations> 
         <transformation> 
          <input>${project.build.directory}/myconfig/work/WEB-INF/web.xml</input> 
          <output>WEB-INF/web.xml</output> 
          <!-- your transformation config --> 
         </transformation> 
        </transformations> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.1.1</version> 
     <configuration> 
      <webResources> 
       <!-- Instruct war plugin to include temp build directory in webapp --> 
       <resource> 
        <directory>${project.build.directory}/myconfig/build</directory> 
        <includes> 
         <include>**</include> 
        </includes> 
       </resource> 
      </webResources> 
      <overlays> 
       <!-- Overlay customization if needed --> 
      </overlays> 
     </configuration> 
    </plugin> 
</plugins> 

जहां तक ​​मेरा बता सकते हैं, युद्ध प्लगइन webResources, पहले src/main/webapp द्वारा पीछा किया, ओवरले के बाद भी शामिल है।

मैवेन-कॉन्फिग-प्रोसेसर-प्लगइन से परिचित नहीं हूं, इसलिए माफी माँगता हूं कि मेरी कॉन्फ़िगरेशन सही नहीं है।

+0

धन्यवाद! एक जादू की तरह काम किया। – M1EK

+0

शायद यह बहुत जल्द कहा था। यह अब काम नहीं कर रहा है; संशोधित संसाधन ओवरले द्वारा अधिलेखित हो रहा है, भले ही यह इंगित करता है कि यह इसे छोड़ दिया गया है। – M1EK

+0

लेकिन संशोधित संसाधन अस्थायी निर्माण निर्देशिका ('myconfig/build' मेरे उत्तर में) में सही ढंग से दिखाई देता है? – matts

4

आप unpack goal of maven-dependency-plugin का उपयोग प्रोजेक्ट ए लाने के लिए स्थानीय रूप से web.xml प्राप्त करने के लिए कर सकते हैं, फिर इसे बदलें और maven-war-plugin to transformed web.xml पर इंगित करें।

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.4</version> 
      <executions> 
       <execution> 
       <id>unpack</id> 
       <phase>generate-resources</phase> 
       <goals> 
        <goal>unpack</goal> 
       </goals> 
       <configuration> 
        <artifactItems> 
        <artifactItem> 
         <groupId>org.test</groupId> 
         <artifactId>test-war1</artifactId> 
         <version>0.0.1-SNAPSHOT</version> 
         <type>war</type> 
        </artifactItem>   
        </artifactItems> 
        <outputDirectory>${project.build.directory}/wars</outputDirectory> 
       </configuration> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <groupId>com.google.code.maven-config-processor-plugin</groupId> 
      <artifactId>maven-config-processor-plugin</artifactId> 
      <version>2.0</version> 
      <configuration> 
       <!-- 
        configure to transform file 
        ${project.build.directory}/wars/WEB-INF/web.xml 
        into 
        ${project.build.directory}/transformed/web.xml 
       --> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>process</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.2</version> 
      <configuration> 
       <warSourceDirectory>src/main/webapp</warSourceDirectory> 
       <webXml>${project.build.directory}/transformed/web.xml</webXml> 
      </configuration> 
     </plugin> 
    </plugins> 
    </build> 
+0

धन्यवाद! विश्वास करो कि यह काम किया होगा; पहले सुझाव की कोशिश की तो उन्हें जवाब क्रेडिट मिला। – M1EK

+0

बढ़िया!मैंने इस दृष्टिकोण की कोशिश की और यह काम करता है। मुझे नहीं पता था कि आप 'maven-war-plugin' में 'web.xml' फ़ाइल निर्दिष्ट कर सकते हैं। – Jens

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

  • कोई संबंधित समस्या नहीं^_^