2017-11-06 48 views
6

मैं तीन मॉड्यूल core, utils और test-utilsJava9 मल्टी मॉड्यूल Maven परियोजना टेस्ट निर्भरता

कोर के साथ एक बहु मॉड्यूल Maven परियोजना निम्नलिखित निर्भरता परिभाषा

<dependency> 
    <groupId>my.project</groupId> 
    <artifactId>utils</artifactId> 
</dependency> 
<dependency> 
    <groupId>my.project</groupId> 
    <artifactId>test-utils</artifactId> 
    <scope>test</scope> 
</dependency> 

मैं जावा 9 module-info.java जोड़ लिया है है है सभी तीन मॉड्यूल और core के लिए परिभाषाएं इस तरह दिखती हैं:

module my.project.core { 
    requires my.project.utils; 
} 

हालांकि मैं परीक्षण निष्पादन के दौरान test-utils कक्षाओं को देखने में सक्षम होने के लिए core की परीक्षा कक्षाओं को कैसे प्राप्त कर सकता हूं, यह नहीं समझ सकता। जब maven-surefire-plugin परीक्षण चलाने का प्रयास करता है तो मुझे कक्षा नहीं मिलती है।

अगर मैं जोड़ने के एक requires my.project.testutils;core करने के module-info.java:

module my.project.core { 
    requires my.project.utils; 
    requires my.project.testutils; //test dependency 
} 

फिर संकलन समय पर मुझे लगता है कि my.project.testutils मॉड्यूल नहीं पाया जा सकता है (शायद क्योंकि यह केवल एक परीक्षण निर्भरता के रूप में लाया गया है कोई त्रुटि मिलती है)।

जावा 9 मॉड्यूलर दुनिया में परीक्षण निर्भरताओं के साथ कोई कैसे काम करता है? स्पष्ट कारण के लिए मैं नहीं चाहता कि मेरा मुख्य कोड परीक्षण निर्भरताओं में खींचें। क्या मैं कुछ भूल रहा हूँ?

+3

मैं मैवेन मैवेन नहीं हूं और मैंने Surefire प्लगइन का उपयोग नहीं किया है, लेकिन 'मॉड्यूल-info.java' दोनों' आवश्यक 'के साथ निश्चित रूप से गलत दिशा है। आम तौर पर, जावा 9 में, परीक्षणों को 'पैचिंग' द्वारा मॉड्यूल द्वारा सुविधा प्रदान की जाती है (मेवेन और ग्रैडल इस सार को दूर करते हैं)। एक और नोट पर, यह स्पष्ट नहीं है कि आपने इस दस्तावेज़ को फिर से देखा है: टूलचेन्स? - http://maven.apache.org/surefire/maven-surefire-plugin/java9.html –

+1

यह Surefire प्लगइन का उपयोग नहीं करता है, न ही 'test' scope (इसलिए मैं इसे एक उत्तर के रूप में नहीं लिखूंगा), लेकिन अगर यह मदद करता है, तो यहां मैवेन का उपयोग करके एक छोटा जावा 9 उदाहरण है - https://github.com/codetojoy/WarO_Java_9_Maven –

+0

@MichaelEaster पैचिंग मॉड्यूल पर हिस्सा सही है, लेकिन टूलचेन भाग प्रश्न से असंबंधित प्रतीत होता है। – nullpointer

उत्तर

4

मैवेन और जावा 9 के साथ, यदि आपकी my.project.testutils एक टेस्ट स्कोप निर्भरता है, तो आपको मॉड्यूल डिस्क्रिप्टर में स्पष्ट रूप से (requires) शामिल करने की आवश्यकता नहीं है।


परीक्षण निर्भरताओं को कक्षा के माध्यम से ही देखभाल की जाती है। तो आप आसानी से testutils हटा सकते हैं और परीक्षण निष्पादित करते समय इसे मैवेन द्वारा पैच किया जाएगा।

module my.project.core { 
    requires my.project.utils; 
} 

slide 30 pertaining to maven-compiler-plugin.

enter image description here

का संदर्भ लें मैं करूंगा भी आप कार्यान्वयन कि maven इस प्रकार है पर इस बात की पुष्टि रॉबर्ट द्वारा Where should I put unit tests when migrating a Java 8 project to Jigsaw और this comment पर एक नज़र डालें सुझाव देते हैं।

संपादित: एक sample project बनाया गया एक सादृश्य है कि मुख्य मॉड्यूल के रूप में एक ही है ड्राइंग अपने core, guava पर निर्भरता अपने utils रूप में ही है और junit निर्भरता अपने testutils के समान है।

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