2009-08-14 9 views
9

मैं एक अलग चरण में मेवेन कंपाइलर प्लगइन चलाने के लिए और विभिन्न स्रोत निर्देशिकाओं और गंतव्य निर्देशिकाओं के साथ चलाने के लिए चाहता हूं जैसे कि src/main/java और src/test/java के अलावा निर्देशिकाओं से कोड उपयोग किया गया।Maven2 कंपाइलर कस्टम निष्पादन स्रोत निर्देशिका और लक्ष्य निर्देशिका

मैंने सोचा कि समाधान नीचे जैसा कुछ दिखाई देगा, जहां चरण मैं इसे जोड़ने वाला था पूर्व-एकीकरण-परीक्षण था। हालांकि testSourceDirectory और testOutputDirectory के गुण इस तरह से निर्दिष्ट नहीं होते हैं क्योंकि वे पीओएम के अनुभाग में हैं।

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 

    <executions> 
    <execution> 
     <id>compile mytests</id> 
     <goals> 
     <goal>testCompile</goal> 
     </goals> 
     <phase>pre-integration-test</phase> 
     <configuration> 
     <testSourceDirectory>${basedir}/src/inttest/java</testSourceDirectory> 
     <testOutputDirectory>${basedir}/target/inttest-classes</testOutputDirectory> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

वहाँ एक रास्ता इस प्लग-इन को उसके डिफ़ॉल्ट आपरेशन को प्रभावित किए बिना विभिन्न चरणों में विभिन्न निर्देशिका संकलित करने के लिए प्राप्त करने के लिए है?

उत्तर

9

स्रोत निर्देशिका < > तत्व के अंदर कंपाइलर-प्लगइन के बाहर सेट की गई हैं, इसलिए यह काम नहीं करेगी।

आप निर्माण सहायक-Maven-प्लगइन के add-source और add-test-source अपने एकीकरण परीक्षण के लिए अतिरिक्त स्रोत निर्देशिका निर्दिष्ट करने के लिए उपयोग कर सकते हैं, लेकिन यह नहीं मौजूदा स्रोत dirs निकाल देंगे।

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
     <execution> 
     <id>add-it-source</id> 
     <phase>pre-integration-test</phase> 
     <goals> 
      <goal>add-source</goal> 
     </goals> 
     <configuration> 
      <sources> 
      <source>${basedir}/src/inttest/java</source> 
      </sources> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

आप ऐड-परीक्षण स्रोत सिर्फ testCompile लक्ष्य से पहले चलाने के लिए लक्ष्य के लिए बाध्य है, तो अपने एकीकरण परीक्षणों शामिल किया जाएगा। ध्यान दें कि आप चाहते हैं कि वे लक्ष्य/परीक्षण-वर्गों के लिए आउटपुट हों ताकि सुनिश्चित प्लगइन उन्हें ढूंढ सके।

मानक परीक्षण स्रोतों को हटाने के लिए, मैंने एकीकरण परीक्षण के लिए जोड़ने से पहले मौजूदा टेस्टसोर्स स्थानों को हटाने के लिए मॉडल को संशोधित करने के लिए एक छोटी प्लगइन लिखी।

4

अधिक शोध के बाद यह स्पष्ट है कि मैवेन 2 में वास्तव में यह संभव नहीं है कि मैं चाहता हूं कि एकीकरण परीक्षण शुरू करने के लिए कुछ रूपों का एक हैक आवश्यक है। जबकि आप अतिरिक्त निर्देशिकाएं जोड़ सकते हैं (जैसा कि रिच विक्रेता द्वारा सुझाया गया है) अन्य स्रोतों को हटाने या मुख्य संकलन से अलग निर्देशिका को संकलित करने के लिए कोई प्लगइन नहीं है।

एकीकरण परीक्षण जोड़ने के लिए मैंने जो सबसे अच्छा समाधान पाया है, सबसे पहले परीक्षण सहायक के रूप में संकलित करने के लिए निर्देशिका inttest निर्देशिका को जोड़ने के लिए बिल्ड सहायक सहायक प्लगइन का उपयोग करना है।

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>add-test-source</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>add-test-source</goal> 
      </goals> 
      <configuration> 
       <sources> 
        <source>src/inttest/java</source> 
       </sources> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
अब आदेश एकीकरण परीक्षणों एकीकरण-परीक्षण चरण आप को बहिष्कृत कर उपयोग करने की आवश्यकता है जब वे नीचे के रूप में चलाने के मिल हेरफेर करने के लिए भी शामिल है पर अमल करने के लिए प्राप्त करने के लिए

। यह आपको इच्छित कस्टम पैरामीटर की अनुमति देता है (मेरे मामले में एजेंट को तर्क के माध्यम से जोड़ा जा रहा है)।

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
    <excludes> 
     <exclude>**/itest/**</exclude> 
    </excludes> 
    </configuration> 
<executions> 
    <execution> 
     <id>inttests</id> 
     <goals> 
      <goal>test</goal> 
     </goals> 
     <phase>integration-test</phase> 
     <configuration> 
      <excludes><exclude>none</exclude></excludes> 
      <includes> 
       <include>**/itest/**/*Test.java</include> 
      </includes> 
     </configuration> 
    </execution> 
</executions> 
</plugin> 
+0

हां यह सही ढंग से काम नहीं करता है। ऐसा लगता है कि यदि आप इस कोबर्टुरा का उपयोग करते हैं: कोबर्टुरा एकीकरण-परीक्षण तो मैवेन कवरेज के साथ यूनिट परीक्षण चलाता है, फिर परीक्षण स्वयं और फिर अंततः एकीकरण परीक्षण चलाता है, और किसी कारण से बहिष्कारों को अनदेखा करता है लेकिन इसमें शामिल हैं। –

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