2010-05-26 11 views
9

मैवेन/सरेफायर के दौरान मैनिफेस्ट को "एमवीएन टेस्ट" चलाने के दौरान मैनिफेस्ट कैसे उपलब्ध करा सकता हूं?मैं मैवेन/सरेफायर के दौरान मैनिफेस्ट को "एमवीएन टेस्ट" चलाने के दौरान मैनिफेस्ट कैसे उपलब्ध करूं?

मेरे पास एक ओपन-सोर्स प्रोजेक्ट है जिसे मैं एंटी से मेवेन में परिवर्तित कर रहा हूं, जिसमें इसके यूनिट परीक्षण भी शामिल हैं। मेवेन प्रोजेक्ट के साथ प्रोजेक्ट सोर्स रिपोजिटरी यहां दी गई है: http://github.com/znerd/logdoc

मेरा प्रश्न "बेस" नामक प्राथमिक मॉड्यूल से संबंधित है। इस मॉड्यूल में एक यूनिट टेस्ट है जो कक्षा org.znerd.logdoc.Library में स्थिर विधि getVersion() के व्यवहार का परीक्षण करता है। इस विधि रिटर्न:

Library.class.getPackage().getImplementationVersion() 

getImplementationVersion() विधि मैनिफ़ेस्ट फ़ाइल में एक सेटिंग के मान देता है। अब तक सब ठीक है. मैंने अतीत में इसका परीक्षण किया है और यह अच्छी तरह से काम करता है, जब तक कि मेनिफेस्ट वास्तव में META-INF/MANIFEST.MF (या तो फ़ाइल सिस्टम पर या एक जेएआर फ़ाइल के अंदर) कक्षा के वर्ग पर उपलब्ध है।

अब मेरी चुनौती है कि मैनिफ़ेस्ट फ़ाइल उपलब्ध है जब मैं इकाई परीक्षण नहीं चला है:

mvn test 

अचूक इकाई परीक्षण चलाता है, लेकिन मेरी इकाई परीक्षण एक mesage यह दर्शाता है कि Library.getVersion() लौटे null साथ विफल रहता है।

जब मैं जार की जांच करना चाहता हूं, तो मुझे लगता है कि यह भी उत्पन्न नहीं हुआ है। मेवेन/सरेफायर वर्गों के खिलाफ यूनिट परीक्षण चलाता है, से पहले संसाधन कक्षाओं में जोड़े जाते हैं।

आगे की जांच से पता चलता है कि Surefire एक अस्थायी निर्देशिका में अपनी स्वयं की जेएआर फ़ाइल उत्पन्न करता है, उदा।

/private/var/folders/TR/TREvj1wIHYyAcUy-xmc3UU+++TI/-Tmp-/surefirebooter7448562488934426857.jar 

और फिर पुस्तकालय वर्ग को लोड करने के लिए इस JAR का उपयोग करता है। इस जेएआर में src/main/resources के तहत फंसे संसाधन शामिल नहीं हैं। तो META-INF/MANIFEST.MF फ़ाइल डालने से भी काम नहीं होता है।

तो मैं Surefire को META-INF/MANIFEST.MF फ़ाइल को उसी श्रेणी लोडर से Library कक्षा के रूप में उपलब्ध कराने के लिए कैसे कहूं।

ध्यान दें कि मैक ओएस एक्स 10.6.2 पर मैवेन 2.2.0, जावा 1.6.0_17 का उपयोग करता हूं, जो जुनीट 4.8.1 के साथ है।

उत्तर

2

ठीक है, जैसा कि आप आप इशारा किया, समस्या यह है कि MANIFEST.MFpackage दौरान उत्पन्न होता है और सीधे अंतिम जार में शामिल है और यह सब test के बाद होता है। तो मुझे लगता है कि आप होगा करने के लिए या तो:

  • your own MANIFEST.MF (कि package दौरान विलय कर दिए जाने से पहले target/classes में उपलब्ध हो जाएगा) प्रदान करते हैं। मुझे नहीं पता कि यह एक विकल्प है (और यदि यह काम करेगा)।
  • JAR के आधार पर किसी अन्य मॉड्यूल से अपना परीक्षण डालें और चलाएं।
+0

पास्कल, उत्तर के लिए बहुत बहुत धन्यवाद।मैंने दोनों की कोशिश की: जब मैं src/main/resources/META-INF/MANIFEST.MF फ़ाइल जोड़ता हूं और मैं mvn clean test चलाता हूं तो फ़ाइल target/classes/META-INF/MANIFEST.MF पर प्रतिलिपि बनाई जाती है, लेकिन यह अभी भी इकाई परीक्षण के लिए उपलब्ध नहीं है। जब मैं एक ही प्रोजेक्ट के भीतर किसी अन्य मॉड्यूल से JAR पर निर्भर करता हूं, तो JAR का उपयोग नहीं किया जाता है, लेकिन इसके बजाय उत्पन्न कक्षा निर्देशिका। मैंने इसके लिए issue report SUREFIRE-620 बनाया है। –

+0

@ एन्स्टस्ट वेल, मैंने मदद नहीं की लेकिन आपका स्वागत है :) मुझे पहले समाधान के बारे में बड़ा संदेह था, लेकिन ऐसा लगता है कि मैं दूसरे के लिए बहुत अधिक आत्मविश्वास था। जिरा मुद्दे पोस्ट करने के लिए धन्यवाद, यह एक दिलचस्प मामला है। –

+0

मैंने कुछ और जांच की और सवाल को अद्यतन किया। मैं कुछ और खोज करूँगा। शायद एक "खोज-अतिरिक्त-वर्ग-पथ-यहां" निर्देश-निर्देश-निर्देश काम करेगा। –

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