2014-12-31 6 views
13

एक Maven निर्भरता के रूप में केवल परीक्षण क्रम (लेकिन परीक्षण संकलन) वर्ग पथ के लिए इस्तेमाल किया जा रहा घोषित करने के लिए सबसे अच्छा तरीका क्या है?परीक्षण क्रम के रूप में घोषित Maven निर्भरता केवल

विशेष रूप से, मैं slf4j-api (एक प्रवेश मुखौटा) एक ठेठ, संकलन गुंजाइश निर्भरता के रूप में चाहते हैं, लेकिन मैं slf4j-simple (barebones इकाई परीक्षण के लिए उपयुक्त कार्यान्वयन) चाहते हैं केवल परीक्षण क्रम वर्ग पथ पर (यह परीक्षण संकलन के लिए आवश्यक नहीं है)। मैं यह कर दिया गया है:

[WARNING] Unused declared dependencies found: 
[WARNING] org.slf4j:slf4j-simple:jar:1.7.7:test 

मैं एक runtime का उपयोग नहीं कर सकते हैं:

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-simple</artifactId> 
    <scope>test</scope> 
</dependency> 

हालांकि, इस का नकारात्मक पहलू है कि dependency:analyze रिपोर्ट slf4j-simple अप्रयुक्त के रूप में, शायद क्योंकि यह संकलन के लिए आवश्यक नहीं है निर्भरता क्योंकि मैं नहीं चाहता कि निर्भरता पारिस्थितिकीकृत विरासत में हो (उदाहरण के लिए डाउनस्ट्रीम निर्भरता इसके बजाय log4j आदि का उपयोग कर सकती है)। मैंने runtimeoptional=true के साथ प्रयास किया, लेकिन इसके परिणामस्वरूप एक ही चेतावनी हुई।

(ध्यान दें मैं भी निर्भरता प्लगइन के लिए ignoreNonCompile सेट कर सकते हैं कि, लेकिन यह है कि अन्य संभावित समस्याओं को छिपाने के हैं एक बहुत ही कुंद साधन की तरह लगता है।)

+0

क्या यह मुख्य स्रोत के लिए रनटाइम पर की आवश्यकता है? क्या यह अभी भी 'रनटाइम' स्कॉप्ड निर्भरता के लिए शिकायत नहीं करेगा? –

+0

सामान्य ट्रांजिटिव निर्भरताओं में घोषित नहीं किया जाना चाहिए। एक वैकल्पिक निर्भरता के लिए (आमतौर पर लॉगिंग की तरह जो विभिन्न ढांचे का उपयोग कर सकते हैं) आपकी प्रक्रिया सही है। शायद आप एक स्कोप टेस्ट भी जोड़ सकते हैं। –

+0

यह 'रनटाइम' निर्भरता के लिए भी गलत (गलत, IMHO) शिकायत करता है, इसलिए ऐसा लगता है कि अकेले दायरे का जवाब यहां जवाब नहीं है। जो मैं वास्तव में चाहता हूं वह एक ऐसा दायरा है जो 'परीक्षण' और 'रनटाइम' (वर्ग पथ तक) का अंतर है और निर्भरता प्लगइन के लिए "अप्रयुक्त" 'रनटाइम 'निर्भरताओं के बारे में कम गूंगा कार्य करने के लिए है। –

उत्तर

7

कोई गुंजाइश नहीं है कि वास्तव में करता है तुम यहाँ क्या चाहते हैं नहीं है; test सबसे अच्छा उपलब्ध विकल्प है।

एक test-runtime गुंजाइश से पहले (Re: Need for a test-runtime scope?) अनुरोध किया गया है और सुझाव दिया समाधान का बिल्कुल ignoreNonCompile विन्यास आप पहले से ही पता चला है है।

dependency:analyze में पहले से ही कुछ सीमाएं हैं ("some cases are not detected (constants, annotations with source-only retention, links in javadoc)")। आपको यह स्वीकार करना पड़ सकता है कि test -स्कोप निर्भरताएं जो इसके खिलाफ चेतावनी देती हैं वे झूठी सकारात्मक हैं।

(आप सकता है एक अलग मॉड्यूल, जो कोई slf4j कार्यान्वयन निर्भरता के लिए होता है, तो उन्हें एक और मॉड्यूल में चलाने में अपने परीक्षण की परिभाषा अलग हो गए। मुझे नहीं लगता कि कि इसके लायक हो जाएगा।)

+1

जावाडोक मुद्दे के लिए मैंने पूरी तरह योग्य क्लास नाम से जोड़ने और जवाडोक प्लगइन में आधार लिंक यूआरएल जोड़ने और परियोजना पर निर्भरता घोषित करने का सहारा लिया है।इससे एक आयात विवरण और अन्य संभावित नकारात्मक मुद्दों को एक निर्भरता सूचीबद्ध करने से बचा जाता है जिसे वास्तव में आवश्यक नहीं है। –

4

वहाँ Maven में परीक्षण-क्रम की धारणा नहीं है। एकमात्र वास्तविक नकारात्मकता निर्भरता विश्लेषण है जो इन रनटाइम परीक्षण निर्भरताओं को अप्रयुक्त के रूप में पहचानती है। चूंकि वे केवल परीक्षण निर्भरता हैं, हालांकि, यह बहुत सौम्य है और इस परियोजना पर पारस्परिक रूप से निर्भर अन्य परियोजनाओं के मुद्दों का कारण नहीं बन सकता है।

2

Maven-निर्भरता-प्लगइन 2.10 (revision 1649454, जनवरी 2015) के बाद से, आप भी विन्यास के ignoredDependencies, ignoredUnusedDeclaredDependencies और ignoredUsedUndeclaredDependencies की एक सूची में जोड़ सकते हैं।

+0

क्या आप थोड़ा और बता सकते हैं, कृपया? –

+0

ये विकल्प पूछे जाने के ठीक बाद इन विकल्पों को जोड़ा गया था, और मुझे लगता है कि वे स्वीकार किए गए उत्तर के साथ, इस मुद्दे से निपटने के लिए उपलब्ध सर्वोत्तम दृष्टिकोण हैं। –

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