Mavens निर्भरता घोषणाओं का वर्गीकरण संपत्ति का उद्देश्य क्या है?


81

मेरे पास एक pom.xml फ़ाइल है और उसमें मैं देख रहा हूँ कि उनकी 3 निर्भरताएँ समान <artifactId>अंतर के लिए संदर्भित हैं जो टैग में हैं

<classifier>sources</classifier>
<classifier>javadoc</classifier>

मैंने उन निर्भरताओं को हटा दिया है जिनमें SOURCES/JAVADOCकेवल और केवल एक निर्भरता थी। मैंने अपने आवेदन का परीक्षण किया और हर काम ठीक रहा।

इस वर्गीकरण टैग का उपयोग करने का उद्देश्य क्या है? और मुझे <classifier>टैग जोड़ने के लिए दो बार निर्भरता की नकल करने की आवश्यकता क्यों है SOURCES/JAVADOC

<dependency>
   <groupId>oauth.signpost</groupId>
   <artifactId>signpost-commonshttp4</artifactId>
   <version>1.2.1.2</version>
   <type>jar</type>
   <scope>compile</scope>
</dependency>
  <dependency>
   <groupId>oauth.signpost</groupId>
   <artifactId>signpost-commonshttp4</artifactId>
   <version>1.2.1.2</version>
   <type>jar</type>
      ***<classifier>javadoc</classifier>***
   <scope>compile</scope>
</dependency>
<dependency>
   <groupId>oauth.signpost</groupId>
   <artifactId>signpost-commonshttp4</artifactId>
   <version>1.2.1.2</version>
   <type>jar</type>
   ***<classifier>sources</classifier>***
   <scope>compile</scope>
</dependency> 

जवाबों:


65

क्लासिफायर एक ही पोम से निर्मित कलाकृतियों को अलग करता है लेकिन सामग्री में भिन्न होता है। यह कुछ वैकल्पिक और मनमाना स्ट्रिंग है - यदि मौजूद है - संस्करण संख्या के ठीक बाद विरूपण साक्ष्य नाम से जोड़ा जाता है।

स्रोत


1
दस्तावेज़ के अनुसार 'यह कहता है कि वर्गीकृत स्रोत फ़ाइलें और javadoc का उपयोग प्रोजेक्ट स्रोत कोड और API डॉक्स को पैकेज्ड क्लास फ़ाइलों के साथ करने के लिए किया जाता है' का क्या मतलब है? मुझे लगता है कि यही कारण है कि मेरा pom.xml इसका उपयोग करता है। आपको पैक किए गए वर्गों के साथ एपीआई डॉक्स और सोर्स कोड को तैनात करने की आवश्यकता क्यों है। क्या पैक की गई कक्षाएं पर्याप्त अच्छी नहीं हैं?
पुश्या

6
@pushya आमतौर पर जब आप अपनी कलाकृतियों को मावेन सेंट्रल जैसे सार्वजनिक भंडार में तैनात करते हैं, तो आप javadocs और स्रोतों को शामिल करते हैं ताकि मावेन समर्थन के साथ IDE उचित कोड पूरा और JavaDoc पॉपअप कर सकें, और डीबगिंग के दौरान लाइब्रेरी कोड में कदम रख सकें।
इयान रॉबर्ट्स

@IanRoberts जो अब समझ में आता है। तो इसका मतलब है कि मैं "SOURCE / JAVADOC" पर निर्भरता को हटा सकता हूं और वे वैकल्पिक हैं और कोडिंग करते समय डेवलपर के अनुकूल होने के उद्देश्य से काम करते हैं?
५२ पर पुष्य

1
@ संभावना से अधिक, हाँ। इसे आजमाएं और देखें कि क्या होता है।
इयान रॉबर्ट्स

16

फिर भी classifierबेहतर की उपयोगिता को समझने में मदद करने के लिए एक उदाहरण द्वारा एक और अधिक व्यावहारिक जवाब ।

मान लें कि आपके पास किसी कलाकृति के दो संस्करणों की आवश्यकता है: के लिए openjpaऔर इसके लिए eclipselink- क्योंकि जार में ऐसी संस्थाएँ हैं जिन्हें विशेष रूप से JK कार्यान्वयन को बढ़ाने की आवश्यकता है।

आपके पास मावेन प्रोफाइल में परिभाषित इन बिल्डों के लिए कुछ अलग-अलग हैंडलिंग हो सकती हैं और तब उपयोग की जाने वाली प्रोफाइल में संपत्ति भी होती है <classifier />

अलग ढंग से वर्गीकृत संस्करणों का निर्माण करने के लिए, में तो followingly कॉन्फ़िगर कर दिया जाएगाpommaven-jar-plugin

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-jar-plugin</artifactId>
   <version>3.0.2</version>
   <configuration>
       <classifier>${classifier}</classifier>
   </configuration>
</plugin>

दोनों को स्थापित करने से रेपो में फाइल कुछ इस तरह से आएगी:

org / example / data / 1.0.0 / data-1.0.0.pom
org / example / data / 1.0.0 / data-1.0.0-openjpa.jar
org / example / data / 1.0.0 / data-1.0। 0-eclipselink.jar

अब यह केवल classifierउसी चीज का होगा, जिसका कोई उपयोग करता है, इसलिए OpenJPA के लिए, उदाहरण के लिए:

<dependency>
   <groupId>org.example</groupId>
   <artifactId>data</artifactId>
   <version>1.0.0</version>       
   <classifier>openjpa</classifier>
</dependency>

और EclipseLink के लिए आप क्लासिफायर के रूप में स्विच करेंगे:

<classifier>eclipselink</classifier>

मुझे इस सिंटैक्स का स्पष्टीकरण कहां मिल सकता है: <classifier> [openjpa | eclipselink] </ classifier>
एलन स्नाइडर

@AlanSnyder यह सिर्फ एक "आलसी कोडर शॉर्टकट" था वास्तव में कोई वाक्यविन्यास नहीं। मैंने इसे और अधिक स्पष्ट करने के लिए उस हिस्से को संपादित किया। [openjpa|eclipselink]किसी एक को चुनने के लिए सिर्फ एक "चयनकर्ता" था।
पिरहो

7

क्लासिफायर के लिए उदाहरण
इस तत्व के लिए एक प्रेरणा के रूप में, उदाहरण के लिए एक परियोजना पर विचार करें जो जेआरई 1.8 को लक्षित करने वाली एक कलाकृति प्रदान करती है, लेकिन साथ ही साथ एक कलाकृति भी जो अभी भी जेआरई 1.7 का समर्थन करती है। पहली कलाकृति को क्लासिफायरफायर jdk18 से और दूसरे को jdk14 से लैस किया जा सकता है जैसे कि क्लाइंट चुन सकते हैं कि किसको इस्तेमाल करना है।

सहपाठियों के लिए एक और सामान्य उपयोग मामला परियोजना की मुख्य कलाकृतियों के लिए माध्यमिक कलाकृतियों को संलग्न करने की आवश्यकता है। यदि आप मावेन सेंट्रल रिपॉजिटरी को ब्राउज़ करते हैं, तो आप देखेंगे कि क्लासीफायर स्रोत और जावाडॉक का उपयोग प्रोजेक्ट सोर्स कोड और एपीआई डॉक्स के साथ-साथ पैकेज्ड क्लास फाइल्स को तैनात करने के लिए किया जाता है।


3

यह दो कलाकृतियों को अलग करने की अनुमति देता है जो एक ही पोम से संबंधित हैं, लेकिन अलग-अलग तरीके से बनाए गए थे, और संस्करण के बाद फ़ाइल नाम में जोड़ा गया है।

उदाहरण के लिए यदि आपके पास अपने भंडार (डॉक्स, स्रोत ...) में अन्य कलाकृतियां हैं, तो आप उन्हें संदर्भित कर सकते हैं और उन्हें निर्भरता के साथ अपनी परियोजना में जोड़ सकते हैं। इस कोड में <classifier>sources</classifier>हम जोड़कर स्रोत पा रहे हैं। भंडार से भंडार।

    <dependency>
    <groupId>oauth.signpost</groupId>
    <artifactId>signpost-commonshttp4</artifactId>
    <version>1.2.1.2</version>
    <type>jar</type>
    ***<classifier>sources</classifier>***
    <scope>compile</scope>
    </dependency> 

वास्तव में यह आपको आगे की ग्रैन्युलैरिटी के साथ अपनी निर्भरता का पता लगाने देता है।


0

निम्नलिखित के अनुसार: https://blog.packagecloud.io/eng/2017/03/09/how-does-a-maven-repository-work/ क्लासिफायर टैग में "सेकेंडरी आर्टवर्क" का अर्थ है, जो इसका "सकर्मक निर्भरता" है। कट जाएगा! इस प्रकार क्लासिफायर टैग न केवल $ विरूपण साक्ष्य द्वारा "मावेन कोऑर्डिनेट" को बदल देता है- $ संस्करण- $ क्लासिफायर.जर!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.