2012-01-04 7 views
7

मैं अपनी युद्ध फ़ाइल में मेरी कुछ * .properties फ़ाइलों को बदलने के लिए मैवेन का उपयोग करना चाहता हूं।मेवेन संसाधन फ़ाइलें कॉपी नहीं कर रहे हैं

इसलिए मैंने अपने संसाधन फ़ोल्डर में फ़ोल्डर dev, test और prod बनाया। अब मैं संबंधित प्रोफाइल निष्पादित करते समय केवल मेरी युद्ध फ़ाइल में संसाधन फ़ोल्डर पथ में उपयोग किए गए इन फ़ोल्डर्स में से एक चाहता हूं। नतीजा यह है कि मैवेन अन्य सभी फ़ोल्डरों की प्रतिलिपि बना रहा है, इसलिए वे कक्षापाथ में दोगुनी हैं।

<profile> 
     <id>dev</id> 

     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 

     <build> 
      <plugins> 
       <plugin> 
        <artifactId>maven-resources-plugin</artifactId> 
        <version>2.3</version> 
        <executions> 
         <execution> 
          <id>copy-dev-resources</id> 
          <phase>process-resources</phase> 
          <goals> 
           <goal>copy-resources</goal> 
          </goals> 
          <configuration> 

           <overwrite>true</overwrite> 

           <outputDirectory>${basedir}/target/classes</outputDirectory> 
           <resources> 
            <resource> 
             <!-- source --> 
             <directory>src/main/resources/dev</directory> 
            </resource> 
           </resources> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 

मैं कैसे कॉन्फ़िगर करूँ Maven अब है कि इसकी केवल/वर्गों को लक्षित करने के फ़ोल्डर src/मुख्य/संसाधन/dev की सामग्री की प्रतिलिपि: यहाँ मेरी विन्यास है? उत्पादन फ़ोल्डर में "src/मुख्य/संसाधन" में सभी फाइलों, तो आपके वर्तमान कॉन्फ़िगरेशन में यह शायद "देव" "परीक्षण" बनाना होगा, आप डिफ़ॉल्ट प्रतियां द्वारा

उत्तर

7

Maven मदद के लिए और "

धन्यवाद प्रोड "फ़ोल्डरों को उनकी सामग्री के साथ और फिर अतिरिक्त रूप से" देव "उपसर्ग के बिना विकास संसाधनों की प्रतिलिपि बनाएँ।

मैं डिफ़ॉल्ट संसाधन फ़ोल्डर को छोड़ने के लिए सुझाव देता हूं और इसे केवल प्रोफ़ाइल-स्वतंत्र संसाधनों के लिए उपयोग करता हूं।

<profile> 
    <id>dev</id> 
    <build> 
     <resources> 
      <resource> 
       <directory>${basedir}/src/main/resources-dev</directory> 
      </resource> 
     </resources> 
    </build> 
</profile> 

यह आम निर्माण खंड गुण प्रोफाइल में परिभाषित उसका उपयोग करके इस कॉन्फ़िगर करने के लिए संभव हो जाना चाहिए:

<build> 
    <resources> 
     <resource> 
      <directory>${basedir}/src/main/resources-${projectStage}</directory> 
     </resource> 
    </resources> 
</build> 
<profiles> 
    <profile> 
     <id>dev</id> 
     <properties> 
      <projectStage>dev</projectStage> 
     </properties> 
    </profile> 
</profiles> 

किसी कारण से आप तो अपने प्रोफ़ाइल में आप तो अतिरिक्त संसाधन फ़ोल्डरों कॉन्फ़िगर कर सकते हैं अपने वर्तमान निर्देशिका संरचना को बदल नहीं सकते तो आप डिफ़ॉल्ट संसाधन फ़ोल्डर के लिए बहिष्करण कॉन्फ़िगर करने के लिए नेस्टेड प्रोफाइल पर निर्भर फ़ोल्डरों को कॉपी नहीं करना होगा:

<build> 
     <resources> 
      <resource> 
       <directory>${basedir}/src/main/resources</directory> 
       <excludes> 
        <exclude>dev/**</exclude> 
        <exclude>test/**</exclude> 
        <exclude>prod/**</exclude> 
       </excludes> 
      </resource> 
     </resources> 
    </build> 
1

इस उद्देश्य के लिए मेवेन निर्देशिका संरचना में "मुख्य" भाग मौजूद है। संसाधन डीआईआर के अंदर निर्देशिका बनाने के बजाय, आपको अपनी src निर्देशिका में अधिक dirs बनाना चाहिए। यह डिफ़ॉल्ट व्यवहार है, और यह पहले से ही परीक्षण संसाधनों को मैवेन लाइफसाइकिल के परीक्षण चरणों के दौरान मुख्य संसाधनों को ओवरराइड करके लागू कर दिया गया है।

आपका संरचना इस तरह दिखना चाहिए: इस संरचना के साथ

src 
    main 
    resources 
     a.properties 
     b.properties 
     c.properties 
    test 
    resources 
     b.properties 
     c.properties 
    dev 
    resources 
     b.properties 

, अपने "मुख्य" लक्ष्य संपत्ति फ़ाइलों होगा, परीक्षण चरणों अस्थायी रूप से बी और सी के ऊपर लिख होता है, और देव प्रोफ़ाइल केवल होगा अंतिम तैनाती में, एक और कस्टम संस्करण के साथ बी को ओवरराइट करें।

इसे प्राप्त करने के लिए, आपको एक देव प्रोफ़ाइल के लिए maven-resources-plugin को हमारे प्रश्न में पहले से ही कॉन्फ़िगर करना होगा।

और जब आप करते हैं, तो यह भी विचार करें: देव प्रोफाइल का उपयोग करते समय इकाई परीक्षण चलाने के दौरान आप संपत्ति फ़ाइलों का किस संस्करण का उपयोग करना चाहिए?

0

मैं Maven में assembly.xml फ़ाइल का उपयोग किया गया था और इस्तेमाल किया कोड के इस सेट है कि मेरी संसाधन फ़ाइल एप्लिकेशन की मूल निर्देशिका में था सुनिश्चित करने के लिए ...

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 

<id>distribution</id> 
<formats> 
    <format>tar.gz</format> 
</formats> 
<fileSets> 
    <fileSet> 
     <directory>${basedir}</directory> 
     <includes> 
      <include>bin/**</include> 
      <include>webapps/**</include> 
      <include>data/**</include> 
     </includes> 
    </fileSet> 
    <fileSet> 
     <directory>${basedir}/target</directory> 
     <includes> 
      <include>*.jar</include> 
     </includes> 
     <outputDirectory>lib</outputDirectory> 
    </fileSet> 
    <fileSet> 
     <directory>${basedir}/src/main/</directory> 
     <includes> 
      <include>resources/**</include> 
     </includes> 
     <outputDirectory>/</outputDirectory> 
    </fileSet> 
</fileSets> 

<dependencySets> 
    <dependencySet> 
     <outputDirectory>lib</outputDirectory> 
     <useProjectArtifact>false</useProjectArtifact> 
    </dependencySet> 
</dependencySets> 

    </assembly> 

अगर पता नहीं है यह सबसे अच्छा तरीका है, लेकिन यह एक था जिसे मैं कल्पना कर सकता था।

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