"आयात" और "आयात" के बिना गुंजाइश के साथ "पोम" प्रकार की निर्भरता के बीच क्या अंतर है?


112

मावेन 2.0.9 से शुरू होने की संभावना है

<type>pom</type>
<scope>import</scope>

में <dependencyManagement>खंड।

जैसा कि मैं इसे समझता हूं, यह इस पोम में शामिल निर्भरता के साथ "प्रतिस्थापित" होगा जैसे कि वे मूल रूप से यहां परिभाषित किए गए थे।

इस importदायरे के बिना ऊपर दिए गए समाधान और सरल निर्भरता के बीच क्या अंतर है (मैंने बाद वाले को "निर्भरता समूहन" कहा जा रहा है)? क्या एकमात्र अंतर यह है कि इस तरह की "समूहीकृत" निर्भरताएं प्राथमिकता को हल करते समय कम प्राथमिकता रखती हैं?

जवाबों:


187

आप केवल प्रबंधित निर्भरताएँ आयात कर सकते हैं । इसका मतलब है कि आप केवल अपने प्रोजेक्ट के POM के अनुभाग में अन्य POMs आयात कर सकते हैं dependencyManagement। अर्थात

...
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>other.pom.group.id</groupId>
            <artifactId>other-pom-artifact-id</artifactId>
            <version>SNAPSHOT</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>   
    </dependencies>
</dependencyManagement>
...

क्या तब होता है कि सभी निर्भरता में परिभाषित किया गया है dependencyManagementकी धारा other-pom-artifact-idअपने पोम के दशक में शामिल किए गए हैं dependencyManagementअनुभाग। फिर आप इन dependencyP निर्भरता को अपने POM (और उसके सभी बच्चे POMs) के अनुभाग में शामिल कर सकते हैं, versionआदि।

हालाँकि अगर आपके POM में आप एक सामान्य निर्भरता को परिभाषित करते हैं, other-pom-artifact-idतो सभी dependenciesके dependencyभाग से other-pom-artifact-idआपकी परियोजना में सकारत्मक रूप से शामिल हैं - हालाँकि, के dependencyManagementअनुभाग में परिभाषित निर्भरताएँ other-pom-artifact-idशामिल नहीं हैं।

तो मूल रूप से दो अलग-अलग तंत्रों का उपयोग आयात करने के लिए किया जाता है / जिसमें दो अलग-अलग प्रकार की निर्भरताएं (प्रबंधित निर्भरताएं और सामान्य निर्भरताएं) शामिल हैं।

मावेन वेबसाइट पर एक अच्छा पेज है, जो मावेन में डिपेंडेंसी मैनेजमेंट की तुलना में मुझे कहीं बेहतर समझा सकता है, और इसमें आयात निर्भरता पर विशिष्ट जानकारी भी है ।


1
यदि pomA pom, B का माता-पिता है , तो क्या आप B को A के दायरे के साथ परियोजना के आश्रित प्रबंधन में रख सकते हैं import?
Janez Kuhar

यह कैसे काम करता है यह समझाने के लिए महान जवाब, लेकिन क्यों ?? आप अन्य निर्भरता को आंशिक रूप से शामिल क्यों नहीं करना चाहते हैं? क्या तुम भी दोनों कर सकते हो? आयात अन्य-पोम-विरूपण साक्ष्य-आईडी और फिर अन्य पोम-कलाकृतियों-आईडी को भी निर्भरता घोषित करते हैं?
जंकेन लियू

DZone पर एक लेख कुछ अलग बताता है: ... <dependencies> <dependency> <groupId>${project.groupId}</groupId> <artifactId>pomlib-lib</artifactId> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>pomlib-war</artifactId> <type>war</type> </dependency> </dependencies> </project>DRY और स्कीनी युद्ध
coz

1
@JunchenLiu: तो आप प्रोजेक्ट A की केवल कुछ विशेषताओं का उपयोग कर रहे हैं, इसलिए आप केवल उन्हीं परिवर्तनशील निर्भरताओं को शामिल करना चुन सकते हैं, जो उस सुविधा के लिए आवश्यक हैं। आप <depende> में <बहिष्कृत> का उपयोग करके भी काम कर सकते हैं। उदाहरण के लिए चेकआउट करें: jdbi.org/#_getting_started
Nitiraj

15

आपके पास किसी अन्य प्रोजेक्ट में एक pomप्रकार की परियोजना नहीं हो सकती है simple dependency। (ठीक है, आप कर सकते हैं - लेकिन यह उपयोगी कुछ भी नहीं करेगा)। केवल एक parent-childसंबंध हो सकता है । यह अनिवार्य रूप से है managing dependency through inheritance

importअनुभाग pomमें प्रकार निर्भरता के लिए गुंजाइश <dependencyManagement>आपको इसके बराबर प्राप्त करने की अनुमति देती है multiple inheritance

आप अलग poms- अलग हो सकते हैं - प्रत्येक managingसंबंधित निर्भरता का एक गुच्छा। जो परियोजनाएँ इनका उपयोग करती हैं, वे importइन pomsपर निर्भर हो सकते हैं और फिर उन निर्भरताओं को निर्दिष्ट कर सकते हैं जिनकी उन्हें संस्करण की चिंता किए बिना आवश्यकता होती है। यह अनिवार्य रूप से bill of materialsअवधारणा है, जिसे @ DB5 द्वारा निर्दिष्ट लिंक में चित्रित किया गया है।

यह parent pomsजटिल मल्टी-मॉड्यूल प्रोजेक्ट्स को बहुत बड़े और अनपेक्षित होने से बचाने में मदद करता है ।


8
क्या आपको यकीन है? मैंने अन्य परियोजना (पैकेजिंग युद्ध) में एक नियमित निर्भरता के रूप में नियमित रूप से पोम (अपनी स्वयं की निर्भरता वाले) को रखा है और लक्ष्य परियोजना के WEB-INF / lib में शामिल pom परियोजना से सभी निर्भरताएं प्राप्त की हैं। इसीलिए मैं यह सवाल पूछ रहा हूँ :)
grafthez

2
धन्यवाद @ रघुराम, सवाल का जवाब देते समय मूल पोम विकल्प का उल्लेख करना पूरी तरह से भूल गए। एक साधारण निर्भरता के रूप में एक पोम प्रकार परियोजना होने के लिए यह संभव है। जैसा कि मूल प्रश्न में वर्णित है, इसका उपयोग समूह निर्भरता में
DB5


5

दो अवधारणाओं, बहुत ही ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग प्रतिमान के समान, प्रश्न का उत्तर देने में मदद करेगा:

  1. DependencyManagement अनुभाग केवल वर्तमान प्रोजेक्ट में निर्भरता और उनके विवरण वाणी - उद्देश्य, या तो विरासत के माध्यम से (विवरण और अन्य परियोजनाओं में फिर से उपयोग के प्रबंधन है माता-पिता ) या आयात ( गुंजाइश )। यह प्रोग्राम में डेटा प्रकार घोषित करने और इसे उपयोग के लिए उपलब्ध कराने जैसा है।

  2. निर्भरता अनुभाग वैकल्पिक रूप से निर्भरता के तहत घोषित के विवरण (यानी, संस्करण, आदि) इनहेरिट, परियोजना में निर्भरता के वास्तविक उपयोग को परिभाषित करता है dependencyManagment । इसीलिए आपके पास गुम निर्भरताएँ होंगी यदि आप उन्हें केवल निर्भरता प्रबंधन में रखते हैं । यह एक प्रोग्राम में एक डेटा प्रकार के चर उदाहरण को तत्काल करने के लिए अनुरूप है, जहां इसकी आवश्यकता होती है।


यह अच्छा और स्पष्ट है, लेकिन यह ऊपर वाले से एक अलग प्रश्न का उत्तर देता है। :-)
रिक -777
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.