2010-02-02 7 views
6

हमारा एप्लिकेशन कई एप्लिकेशन सर्वरों के लिए बनाया जा सकता है, और कई वातावरणों में उपयोग किया जा सकता है।दो बिल्ड प्रोफाइल सक्रिय हैं, लेकिन मेवेन केवल एक प्रोफ़ाइल में एंटर प्लगइन कार्यों को निष्पादित करता है

मैवेन प्रोफाइल का उपयोग करके एप्लिकेशन सर्वर और लक्ष्य वातावरण का प्रकार निर्दिष्ट किया जाना चाहिए। कोड को संकलित करते समय प्रत्येक प्रोफ़ाइल प्रकार में से एक और केवल उपस्थित होना चाहिए। जेनरेटेड जेएआर में सही सेटिंग फाइलों को शामिल करने के लिए सभी प्रोफाइल एक या कई मैवेन्ट-एंटर-प्लगइन कॉपी कार्यों को निष्पादित करते हैं।

नीचे pom.xml फ़ाइल का हिस्सा है। एएस प्रोफाइल "ऑरैकल" का हिस्सा शामिल है, साथ ही पर्यावरण प्रोफाइल "विकास" का हिस्सा भी शामिल है। उद्देश्य यह है कि जेएआर बनाने के लिए जिसे विकास पर्यावरण में ओरेकल एएस में तैनात किया जा सकता है, कोड दो प्रोफाइल स्विच का उपयोग करके संकलित किया जाता है mvn -P oracle,development

एएस प्रोफाइल में अन्य कार्य भी हैं (नीचे दिखाया नहीं गया है) जिन्हें निष्पादित किया जाना है पर्यावरण प्रोफ़ाइल कार्यों के होने से पहले (यही वजह है कि प्रोफ़ाइल के अलग-अलग चरण होते हैं)।

मेरा मुद्दा यह है कि मैवेन दोनों चयनित प्रोफाइल में कार्यों को निष्पादित करने से इंकार कर देता है।

mvn -Poracle जैसा कि माना जाता है, वैसे ही काम करता है। तो mvn -Pdevelopment करता है। हालांकि, mvn -Poracle,development परिणाम ऑरैक प्रोफाइल में केवल कार्यों के निष्पादन में परिणाम। यदि ऑरैक प्रोफाइल की एंटरन प्लगइन में सभी कार्यों पर टिप्पणी की जाती है, तो विकास प्रोफाइल में कार्य निष्पादित हो जाते हैं।

मेरे प्रश्न हैं: * मैवेन इन दोनों प्रोफाइलों में चींटी कार्यों को निष्पादित करने से इनकार क्यों करता है? * क्या इसे ठीक करने का कोई तरीका है?

प्रोफाइल (ऑरैक-डेवलपमेंट, जेबॉस-डेवलपमेंट इत्यादि) का संयोजन हमारे लिए एक विकल्प नहीं है, क्योंकि यह मॉड्यूल एक बड़ी परियोजना का हिस्सा है और कई अन्य परियोजनाओं में संशोधन की आवश्यकता होगी।

हम वर्तमान में मेवेन 2.2.0 का उपयोग करते हैं।

<profile> 
    <id>oracle</id>  
    <build> 
    <plugins>  
     <plugin> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <executions> 
      <execution> 
      <phase>validate</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <tasks> 
       <copy .../> 
       </tasks> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins>  
    </build> 
</profile>  

...jboss, glassfish profiles... 

<profile> 
    <id>development</id> 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <executions> 
      <execution> 
      <phase>compile</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <tasks> 
       <copy .../> 
       </tasks> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</profile> 

...production, test profiles... 

+0

क्या आपके एंट्रन्स निर्भरता रखते हैं? – bmargulies

उत्तर

7

प्रत्येक <execution> के लिए एक अनूठा निष्पादन आईडी जोड़ें:

<profile> 
    <id>oracle</id>  
    <build> 
    <plugins>  
     <plugin> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>execution1</id> 
      <phase>validate</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <tasks> 
       <echo>ORACLE</echo> 
       </tasks> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins>  
    </build> 
</profile>  
<profile> 
    <id>development</id> 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>execution2</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <tasks> 
       <echo>DEV</echo> 
       </tasks> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</profile> 

परीक्षण किया गया काम कर समाधान :) <id> तत्व के बिना, मुझे लगता है कि यह है कि एक <execution> अन्य ओवरराइड करता है।

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