2012-07-04 12 views
9

मेरे पास दो मॉड्यूल ए और बी हैं। वास्तविकता बी ए
बी के लिए प्लगइन है संकलन समय में ए पर निर्भर करता है। A, B पर निर्भर नहीं एक क्रम मैं classpath को बी जोड़ना चाहते हैं पर,मेवेन रनटाइम स्कोप और चक्रीय निर्भरता

pom.xml

<dependency> 
     <groupId>my_group</groupId> 
     <artifactId>my_Plugin</artifactId> 
     <version>${project.version}</version> 
     <scope>runtime</scope> 
    </dependency> 

Maven प्रक्रिया तो एक के pom.xml में मैं निम्नलिखित निर्भरता जोड़ने चक्रीय निर्भरता त्रुटि के साथ विफल

[ERROR] The projects in the reactor contain a cyclic reference: Edge between 'Vertex{label='A'}' and 'Vertex{label='B'}' introduces to cycle in the graph B-->A-->B -> [Help 1] 

[ERROR]

क्यों क्रम निर्भरता प्रभाव समय संकलन?

+1

इस तरह के प्रोजेक्ट के लिए आपके निर्माण की व्यवस्था करने के लिए एक अच्छा तरीका है। यदि आप किसी अन्य मॉड्यूल (सी) में साझा किए गए कोड को दोबारा प्रतिक्रिया देते हैं, तो प्रोजेक्ट बी को अब संकलन समय पर ए पर निर्भर रहने की आवश्यकता नहीं होगी - ए और बी दोनों सी पर निर्भर हो सकते हैं। फिर बी पर निर्भर होने की कोई समस्या नहीं है चलने के समय पर। इस बारे में सोचने का एक अच्छा तरीका है पुस्तकालय लिखना - एक तेज कोड का एक समूह - और एक आवेदन, जो एकत्रित पुस्तकालयों का संग्रह है। एक एप्लिकेशन प्रोजेक्ट में वास्तव में कोई भी कोड शामिल करने की आवश्यकता नहीं होती है। – Conan

उत्तर

1

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

+1

ए का कोड मेरी ज़िम्मेदारी के तहत नहीं है, इसलिए मैं इसे अलग नहीं कर सकता। – user1500951

+0

अच्छा, अगर यह कोड आप या आपकी कंपनी ने तैयार किया है, तो यह तरीका है। यदि नहीं - आपके उदाहरण के आधार पर और जो कुछ आपने हमें बताया है, वहां कोई अन्य स्पष्ट समाधान नहीं है। – carlspring