2012-08-02 16 views
71

Maven 2.0.9 से शुरू वहाँ संभावना है शामिल करने के लिएस्कोप "आयात" और "पोम" प्रकार निर्भरता के बीच क्या अंतर है?

<type>pom</type> 
<scope>import</scope> 
<dependencyManagement> खंड में

है।

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

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

उत्तर

130

आप केवल प्रबंधित निर्भरता आयात कर सकते हैं। इसका मतलब है कि आप अपने प्रोजेक्ट के पीओएम के 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> 
... 

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

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

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

मैवेन वेबसाइट पर एक अच्छा पृष्ठ है, जो Dependency Management in Maven से कहीं अधिक बेहतर समझा सकता है और इसमें importing dependencies पर विशिष्ट जानकारी भी शामिल है।

+0

यदि 'पोम' ए 'पोम बी' के माता-पिता है, तो क्या आप प्रोजेक्ट ए के निर्भरता प्रबंधन में बी को 'आयात' के साथ रख सकते हैं? –

+0

यह बताने के लिए महान जवाब है कि यह कैसे काम करता है, लेकिन क्यों ?? आप अन्य निर्भरताओं को पारगमन में शामिल क्यों नहीं करना चाहते हैं? क्या आप दोनों भी कर सकते हैं? अन्य-पोम-आर्टिफैक्ट-आईडी आयात करें और फिर अन्य-पोम-आर्टिफैक्ट-आईडी को निर्भरता के रूप में भी घोषित करें? '... <निर्भरता> $ {project.groupId} pomlib-लिब पोम आयात $ {: DZone पर –

+0

एक लेख में कहा गया है कुछ अलग project.groupId} पोम्लिब-युद्ध डब्ल्यू ar '[सूखी और स्किनी युद्ध] (https://dzone.com/articles/dry-and-skinny-war) – coz

11

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

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

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

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

+5

आपको यकीन है? मैंने नियमित परियोजना (अपनी निर्भरता रखने) को अन्य परियोजना (पैकेजिंग युद्ध) में नियमित निर्भरता के रूप में रखा है और वेब परियोजना-आईएनएफ/लक्ष्य परियोजना के मुक्ति में शामिल पोम परियोजना से सभी निर्भरताओं को प्राप्त किया है। यही कारण है कि मैं इस सवाल से पूछ रहा हूं :) – grafthez

+1

धन्यवाद @ रघुराम, सवाल का जवाब देते समय पूरी तरह से माता-पिता पीओएम विकल्प का उल्लेख करना भूल गए। एक साधारण निर्भरता के रूप में एक पोम प्रकार परियोजना होने के लिए यह संभव है। जैसा कि मूल प्रश्न में बताया गया है [इसका उपयोग [समूह निर्भरता] (http://www.sonatype.com/books/mvnref-book/reference/pom-relationships-sect-pom-best-practice.html) – DB5

+1

[ समूह निर्भरताओं के बारे में कार्य लिंक] (https://books.sonatype.com/mvnref-book/reference/pom-relationships-sect-pom-best-practice.html#pom-relationships-sect-grouping-deps) –

4

दो अवधारणाओं, बहुत ज्यादा वस्तु उन्मुख करने के लिए प्रोग्रामिंग प्रतिमान, सवाल का जवाब देने में मदद मिलेगी समान:

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

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

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