2012-08-24 11 views
8

जिस परियोजना पर मैं काम कर रहा हूं वह कई मॉड्यूल से बना है, जो मैवेन के साथ बनाया जा रहा है। कुछ मॉड्यूल में परीक्षण कोड में अन्य मॉड्यूल से परीक्षण कोड पर निर्भरता है। इन निर्भरताओं को नीचे घोषित किया गया है।टेस्ट-जार निर्भरताओं के साथ मेवेन संकलन चरण को कैसे चलाएं

निर्भरता मॉड्यूल में:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.2</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>test-jar</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

मॉड्यूल जो पिछले मॉड्यूल पर निर्भरता है में:

<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>themodulename</artifactId> 
    <version>${project.version}</version> 
    <type>test-jar</type> 
    <scope>test</scope> 
</dependency> 

इस विन्यास, Maven चरण का उपयोग स्थापित सफलतापूर्वक क्रियान्वित किया जा सकता। लेकिन संकलन या परीक्षण चरण को विफल करने की कोशिश कर रहा है, क्योंकि परीक्षण जार फ़ाइल निर्भरता को हल नहीं किया जा सकता है।

परीक्षण-जार लक्ष्य को देखते हुए, यह पैकेज चरण है, जो मुझे लगता है कि इस समस्या का कारण है दौरान डिफ़ॉल्ट रूप से चलाने के लिए विन्यस्त किया जा रहा है।

फिर, मैं चरण संकलन दौरान चलाने के लिए इस लक्ष्य को मजबूर करने के लिए कोशिश की, में पहली config को संशोधित करके:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.2</version> 
    <executions> 
     <execution> 
      <phase>compile</phase> 
      <goals> 
       <goal>test-jar</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

डीबग लॉग को देखते हुए, मैं देख सकता हूँ कि लक्ष्य अब क्रियान्वित किया जाता है दौरान चरण संकलन, लेकिन यह भी इस:

[WARNING] JAR will be empty - no content was marked for inclusion! 

मैं कॉन्फ़िगर करने के लिए शामिल करने के लिए **/* की कोशिश की और पुष्टि की है कि डिफ़ॉल्ट testClassesDirectory पर सही करने के लिए स्थापित किया गया था ई, लेकिन मुझे अभी भी वही चेतावनी मिलती है।

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

किसी को भी इस विन्यास ताकि मैं सफलतापूर्वक चला सकते हैं संकलन या परीक्षण चरण फिक्सिंग पर कोई विचार है?

+0

कुछ प्लगइन के साथ एक ही समस्या थी। रुचि। – Scorpio

+1

कल एक समान समस्या थी, तो मुझे एहसास हुआ कि मेरे पास maven.skip.tests विकल्प सत्य पर सेट है। क्या यह आपके मामले में कुछ समान हो सकता है? – pushy

+0

आपकी घोषणा ** test-jar ** थोड़ा अजीब लगता है, क्या आप हमें इस संबंधित मॉड्यूल के पोम का शीर्षलेख दिखा सकते हैं? – Farid

उत्तर

3

मुझे दृढ़ विश्वास है कि परीक्षण केवल एक मॉड्यूल का हिस्सा होना चाहिए। आपको अन्य मॉड्यूल में परीक्षणों पर निर्भर नहीं होना चाहिए। यह अनुमान लगाने में बहुत मुश्किल है कि क्या होता है यदि आप परीक्षणों को अलग-अलग व्यवहार करने के लिए अद्यतन करते हैं।

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

+-- MyProject 
+-- common-test-util 
| +-- src 
| | +-- main 
| |  +-- java 
| +-- pom.xml 
+-- moduleA 
| +-- src 
| | +-- main 
| | | +-- java 
| | +-- test 
| |  +-- java 
| +-- pom.xml 
+-- moduleB 
| +-- src 
| | +-- main 
| | | +-- java 
| | +-- test 
| |  +-- java 
| +-- pom.xml 
+-- pom.xml 

सुनिश्चित करें कि आप केवल <scope>test</scope> साथ common-test-util पर निर्भर करें और फिर आप शीर्ष स्तर पर

mvn test 

कॉल करने के लिए सक्षम हो जाएगा और सभी परीक्षणों चलेंगे।

+1

मैं सम्मान से असहमत हूं। मोक्स, टेस्ट डबल्स, स्टब्स, ड्राइवर्स और अन्य टेस्ट फ्रेमवर्क कोड अक्सर मॉड्यूल के बीच उपयोगी रूप से साझा किए जाते हैं लेकिन रनटाइम कोड में शामिल नहीं किया जाना चाहिए।अपने नियमित सामान्य कोड जार के साथ एक आम परीक्षण-जार बनाना बहुत अच्छी तरह से काम करता है। हालांकि निश्चित रूप से मैं सहमत हूं कि सामान्य जार के आंतरिक के लिए विशिष्ट परीक्षणों का उपयोग अन्य मॉड्यूल में नहीं किया जाना चाहिए। आप कोड की इन दो श्रेणियों को अलग कर सकते हैं लेकिन यह अक्सर प्रयास के लायक नहीं है। यदि आपके पास एक बड़ा परीक्षण ढांचा है तो इसे पाठ्यक्रम की एक अलग परियोजना बनाएं। – AutomatedMike

+2

@AutomatedMike यह मैं जितना कह रहा हूं उतना ही कम है। उन सभी चीजों को एक जार में रखें और अन्य मॉड्यूल में विभिन्न परीक्षणों में उपयोग करें। लेकिन इसे 'src/test/java' में भरने की कोशिश न करें। बस अपने वास्तविक परीक्षण वहाँ रखें। – maba

+0

@ माबा - मॉड्यूलबी एकीकरण-परीक्षण है, मेरे पास मॉड्यूलए में एक डीटीओ है, मुझे कहीं एक स्थिरता रखने की आवश्यकता है जिसे मैं मॉड्यूलए और मॉड्यूलबी दोनों में उपयोग कर सकता हूं। इस मामले में आपका सुझाव क्या है? – danidacar

3

आपकी समस्या मल्टी-मॉड्यूल बिल्ड में निर्भरता रिज़ॉल्यूशन पर निर्भर है। यह विशेष रूप से परीक्षण कोड से संबंधित नहीं है।

मेरे पास बिल्कुल यह सेटअप है। एक सामान्य मॉड्यूल में साझा परीक्षण कोड के साथ रनटाइम कोड होता है (परीक्षण युगल & मोजे आदि)। परीक्षण कोड का प्रयोग अन्य मॉड्यूल में परीक्षणों द्वारा किया जाता है। यह हमारे लिए बहुत अच्छा काम करता है।

"एमवीएन संकलन" केवल रनटाइम कोड संकलित करता है।

पैरेंट स्तर (रिएक्टर बिल्ड) पर "एमवीएन टेस्ट-कंपाइल", "एमवीएन टेस्ट" या "एमवीएन पैकेज" चलाना सब कुछ पूरी तरह से काम करता है। रिएक्टर इसे सब कुछ हल कर सकता है।

यदि आप मॉड्यूल स्तर पर एक बिल्ड चलाते हैं तो उस मॉड्यूल के सभी अवशेषों को रेपो में होना चाहिए। इसका मतलब है कि आप प्रत्येक निर्भर मॉड्यूल के लिए "एमवीएन इंस्टॉल" को लगातार चलाना होगा। यह नियम नियमित निर्भरताओं और परीक्षण दोनों के लिए समान रूप से लागू होता है।

यदि आप उम्मीद कर रहे थे कि यह माता-पिता के लिए मूल लिंक का पालन करेगा और अन्य मॉड्यूल में मुझे आपको निराश करना होगा। अभिभावक लिंक का उपयोग केवल पोम में सामान्य सेटिंग्स को प्राप्त करने के लिए किया जाता है, न कि निर्भरता संकल्प के लिए।

व्यक्तिगत रूप से मैं हमेशा माता-पिता से एक पूर्ण रिएक्टर निर्माण करता हूं। मैं केवल एक व्यक्तिगत मॉड्यूल बिल्ड करता हूं अगर मैंने पहले माता-पिता स्तर पर एमवीएन इंस्टॉल किया है और मुझे पता है कि अन्य मॉड्यूल बदल नहीं गए हैं।

उम्मीद है कि मदद करता है।

4

मुझे लगता है कि ये प्लगइन कॉन्फ़िगरेशन आपके लिए काम करता है।

बस संसाधन तैयार करने और संकलन में झूठ को छोड़ने के लिए छोड़ दें।

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>default-testResources</id> 
     <configuration> 
      <skip>false</skip> 
     </configuration> 
     <phase>process-test-resources</phase> 
     <goals> 
      <goal>testResources</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>default-testCompile</id> 
     <configuration> 
      <skip>false</skip> 
     </configuration> 
     <phase>test-compile</phase> 
     <goals> 
      <goal>testCompile</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <executions> 
     <execution> 
     <configuration> 
      <skip>false</skip> 
     </configuration> 
     <goals> 
      <goal>test-jar</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
संबंधित मुद्दे