java - चींटी और मेवेन के बीच मतभेद




maven-2 ant (6)

चींटी मुख्य रूप से एक निर्माण उपकरण है।

मेवेन एक प्रोजेक्ट और निर्भरता प्रबंधन उपकरण है (जो निश्चित रूप से आपकी परियोजना भी बनाता है)।

यदि आप मेवेन से बचना चाहते हैं तो चींटी + Ivy एक बहुत अच्छा संयोजन है।

क्या कोई मुझे चींटी और मेवेन के बीच मतभेद बता सकता है? मैंने कभी भी इस्तेमाल नहीं किया है। मैं समझता हूं कि उनका उपयोग जावा परियोजनाओं के निर्माण को स्वचालित करने के लिए किया जाता है, लेकिन मुझे नहीं पता कि कहां से शुरू करना है।


बस कुछ और मतभेदों को सूचीबद्ध करने के लिए:

  • चींटी औपचारिक सम्मेलन नहीं है। आपको चींटी को बिल्कुल कहां कहना है कि स्रोत कहां ढूंढना है, आउटपुट कहां रखना है, इत्यादि।
  • चींटी प्रक्रियात्मक है। आपको चींटी को बिल्कुल बताना होगा कि क्या करना है; इसे संकलित करने, प्रतिलिपि बनाने, फिर संपीड़ित करने के लिए कहें।
  • चींटी में जीवन चक्र नहीं है।
  • मेवेन सम्मेलन का उपयोग करता है। यह जानता है कि जब तक आप इन सम्मेलनों का पालन करते हैं, तब तक आपका स्रोत कोड स्वचालित रूप से कहां है। आपको मेवेन को यह कहने की ज़रूरत नहीं है कि यह कहां है।
  • मेवेन घोषणात्मक है; आपको बस एक pom.xml फ़ाइल बनाना है और अपना स्रोत डिफ़ॉल्ट निर्देशिका में रखना है। मेवेन बाकी का ख्याल रखेगा।
  • मेवेन का जीवन चक्र है। आप बस एमवीएन इंस्टॉल को कॉल करते हैं और अनुक्रम चरणों की एक श्रृंखला निष्पादित की जाती है।
  • मेवेन में सामान्य परियोजना कार्यों के बारे में खुफिया जानकारी है। परीक्षण चलाने के लिए, सरल निष्पादन एमवीएन परीक्षण , जब तक कि फाइल डिफ़ॉल्ट स्थान पर हों। चींटी में, आपको सबसे पहले JUnit JAR फ़ाइल करना होगा, फिर एक क्लासपाथ बनाएं जिसमें जुनीट जार शामिल है, फिर एंटी को बताएं जहां इसे टेस्ट सोर्स कोड की तलाश करनी चाहिए, एक ऐसा लक्ष्य लिखें जो परीक्षण स्रोत को संकलित करता है और अंततः यूनिट परीक्षण निष्पादित करता है जुनीट के साथ

अद्यतन करें:

यह मेवेन से आया : परिभाषा गाइड । क्षमा करें, मैं इसे पूरी तरह से उद्धृत करना भूल गया।


मेवेन में आमतौर पर प्रयुक्त ओपन सोर्स प्रोजेक्ट्स का एक बड़ा भंडार होता है। निर्माण के दौरान मेवेन आपके लिए इन निर्भरताओं को डाउनलोड कर सकता है (साथ ही आपकी निर्भरता निर्भरता :)) एक परियोजना को थोड़ा अधिक प्रबंधनीय बनाने के इस हिस्से को बनाने के लिए।


मैं ऐसे व्यक्ति को ले सकता हूं जिसने कभी एंट नहीं देखा है - इसकी build.xml एस उचित रूप से अच्छी तरह से लिखी गई हैं - और वे समझ सकते हैं कि क्या हो रहा है। मैं वही व्यक्ति ले सकता हूं और उन्हें एक मेवेन पोम दिखा सकता हूं और उन्हें कोई जानकारी नहीं होगी कि क्या हो रहा है।

एक इंजीनियरिंग संगठन में जो विशाल है, लोग एंट फाइलों को बड़े और अप्रबंधनीय बनने के बारे में लिखते हैं। मैंने उन प्रकारों को लिखा है और चींटी स्क्रिप्ट साफ़ कर दी हैं। यह वास्तव में आगे बढ़ रहा है कि आपको आगे बढ़ने और टेम्पलेट्स के एक सेट को डिज़ाइन करने की आवश्यकता है जो 3+ वर्ष की अवधि में परिवर्तन और स्केल का जवाब दे सकता है।

जब तक आपके पास एक साधारण परियोजना न हो, तब तक मेवेन सम्मेलन सीखना और काम करने के बारे में मेवेन तरीका काफी काम है।

दिन के अंत में आप चींटी या मेवेन के साथ प्रोजेक्ट स्टार्टअप पर विचार नहीं कर सकते हैं: यह वास्तव में स्वामित्व की कुल लागत है। संगठन को कुछ वर्षों में अपनी बिल्ड सिस्टम को बनाए रखने और बढ़ाने के लिए क्या करना है, यह मुख्य कारकों में से एक है जिसे माना जाना चाहिए।

बिल्ड सिस्टम के सबसे महत्वपूर्ण पहलू निर्भरता प्रबंधन और बिल्ड रेसिपी को व्यक्त करने में लचीलापन हैं। अच्छी तरह से किया जाने पर यह कुछ हद तक सहज होना चाहिए।


मेवेन या चींटी? इस के लिए एक बहुत ही समान सवाल है, जो आपको अपने सवालों के जवाब देने में मदद कर सकता है।

मावेन क्या है? आधिकारिक साइट पर।

संपादित करें: एक नए / ग्रीनफील्ड प्रोजेक्ट के लिए, मैं मेवेन का उपयोग करने की सलाह दूंगा: "कॉन्फ़िगरेशन पर सम्मेलन" आपको लिखने और निर्माण और तैनाती स्क्रिप्ट स्थापित करने के लिए समय का एक सभ्य हिस्सा बचाएगा। जब आप चींटी का उपयोग करते हैं, तो निर्माण स्क्रिप्ट लंबाई और जटिलता में समय के साथ बढ़ने लगती है। मौजूदा परियोजनाओं के लिए, मेवेन सिस्टम में उनके कॉन्फ़िगरेशन / लेआउट को shoehorn करना मुश्किल हो सकता है।


मेवेन में: परिभाषित मार्गदर्शिका , मैंने परिचय में मेवेन और चींटी के बीच मतभेदों के बारे में लिखा है, खंड शीर्षक "चींटी और मेवेन के बीच मतभेद" है । यहां एक उत्तर दिया गया है जो कुछ अतिरिक्त नोट्स के साथ उस परिचय में जानकारी का संयोजन है।

एक सरल तुलना

मैं आपको केवल इस विचार को स्पष्ट करने के लिए दिखा रहा हूं कि, सबसे बुनियादी स्तर पर, मेवेन ने अंतर्निहित सम्मेलन बनाए हैं। यहां एक साधारण चींटी बिल्ड फ़ाइल है:

<project name="my-project" default="dist" basedir=".">
    <description>
        simple example build file
    </description>   
    <!-- set global properties for this build -->   
    <property name="src" location="src/main/java"/>
    <property name="build" location="target/classes"/>
    <property name="dist"  location="target"/>

    <target name="init">
      <!-- Create the time stamp -->
      <tstamp/>
      <!-- Create the build directory structure used by compile -->
      <mkdir dir="${build}"/>   
    </target>

    <target name="compile" depends="init"
        description="compile the source " >
      <!-- Compile the java code from ${src} into ${build} -->
      <javac srcdir="${src}" destdir="${build}"/>  
    </target>

    <target name="dist" depends="compile"
        description="generate the distribution" >
      <!-- Create the distribution directory -->
      <mkdir dir="${dist}/lib"/>

      <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file
-->
      <jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>
   </target>

   <target name="clean"
        description="clean up" >
     <!-- Delete the ${build} and ${dist} directory trees -->
     <delete dir="${build}"/>
     <delete dir="${dist}"/>
   </target>
 </project>

इस साधारण चींटी उदाहरण में, आप देख सकते हैं कि आपको चींटी को वास्तव में क्या कहना है। एक संकलित लक्ष्य है जिसमें javac कार्य शामिल है जो स्रोत / मुख्य / जावा निर्देशिका में स्रोत / लक्ष्य निर्देशिका में स्रोत को संकलित करता है। आपको चींटी को बिल्कुल कहना होगा कि आपका स्रोत कहां है, जहां आप परिणामी बाइटकोड को संग्रहीत करना चाहते हैं, और इसे सभी को JAR फ़ाइल में कैसे पैकेज करना है। हालांकि कुछ हालिया घटनाएं हैं जो चींटी को कम प्रक्रियात्मक बनाने में मदद करती हैं, एंटी के साथ डेवलपर का अनुभव एक्सएमएल में लिखित प्रक्रियात्मक भाषा को कोड करने में है।

एक मेवेन उदाहरण के साथ पिछले चींटी उदाहरण की तुलना करें। मेवेन में, कुछ जावा स्रोत से एक जेएआर फ़ाइल बनाने के लिए, आपको बस एक साधारण pom.xml बनाना है, अपना स्रोत कोड $ {basedir} / src / main / java में रखें और फिर कमांड लाइन से mvn इंस्टॉल करें । उदाहरण Maven pom.xml जो एक ही परिणाम प्राप्त करता है।

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.sonatype.mavenbook</groupId>
  <artifactId>my-project</artifactId>
  <version>1.0</version>
</project>

आपको बस अपने pom.xml में चाहिए। कमांड लाइन से चल रहा एमवीएन इंस्टॉलेशन संसाधनों को संसाधित करेगा, स्रोत संकलित करेगा, इकाई परीक्षण निष्पादित करेगा, एक जेएआर बनाएगा, और अन्य परियोजनाओं में पुन: उपयोग के लिए स्थानीय भंडार में जेएआर स्थापित करेगा। संशोधन के बिना, आप एमवीएन साइट चला सकते हैं और फिर लक्ष्य / साइट में index.html फ़ाइल ढूंढ सकते हैं जिसमें JavaDoc के लिंक और आपके स्रोत कोड के बारे में कुछ रिपोर्ट शामिल हैं।

माना जाता है कि यह सबसे आसान संभव उदाहरण परियोजना है। एक परियोजना जिसमें केवल स्रोत कोड होता है और जो एक जेएआर उत्पन्न करता है। एक परियोजना जो मेवेन सम्मेलनों का पालन करती है और किसी भी निर्भरता या अनुकूलन की आवश्यकता नहीं होती है। अगर हम व्यवहार को अनुकूलित करना शुरू करना चाहते हैं, तो हमारा pom.xml आकार में बढ़ने जा रहा है, और सबसे बड़ी परियोजनाओं में आप बहुत ही जटिल मेवेन पीओएम के संग्रह देख सकते हैं जिसमें प्लगइन अनुकूलन और निर्भरता घोषणाओं का एक बड़ा सौदा शामिल है। लेकिन, यहां तक ​​कि जब आपकी प्रोजेक्ट की पीओएम फाइलें अधिक महत्वपूर्ण हो जाती हैं, तब भी वे चींटी का उपयोग करके समान आकार की परियोजना के निर्माण फ़ाइल से पूरी तरह से अलग तरह की जानकारी रखते हैं। मेवेन पीओएम में घोषणाएं हैं: "यह एक जार परियोजना है", और "स्रोत कोड src / main / java में है"। चींटी बिल्ड फाइलों में स्पष्ट निर्देश होते हैं: "यह प्रोजेक्ट है", "स्रोत src/main/java " में है, "इस निर्देशिका के खिलाफ javac चलाएं", "परिणामों को target/classses ", "से एक JAR बनाएँ। ... ", आदि। जहां चींटी को प्रक्रिया के बारे में स्पष्ट होना था, वहां मेवेन में कुछ" अंतर्निहित "था जो सिर्फ यह जानता था कि स्रोत कोड कहां था और इसे कैसे संसाधित किया जाना चाहिए।

उच्च स्तरीय तुलना

इस उदाहरण में चींटी और मेवेन के बीच मतभेद? चींटी ...

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

जहां मेवेन ...

  • सम्मेलन है, यह पहले से ही पता था कि आपका स्रोत कोड कहां था क्योंकि आपने सम्मेलन का पालन किया था। यह लक्ष्य / कक्षाओं में बाइटकोड डालता है, और इसने लक्ष्य में एक जेएआर फ़ाइल बनाई।
  • घोषणात्मक है। आपको बस इतना करना था कि pom.xml फ़ाइल बनाएं और अपना स्रोत डिफ़ॉल्ट निर्देशिका में रखें। मेवेन ने बाकी का ख्याल रखा।
  • एक लाइफसाइकिल है, जिसे आपने mvn install करते समय बुलाया था। इस आदेश ने मैवेन को जीवन चक्र तक पहुंचने तक अनुक्रम चरणों की एक श्रृंखला निष्पादित करने के लिए कहा। जीवन चक्र के माध्यम से इस यात्रा के दुष्प्रभाव के रूप में, मेवेन ने कई डिफ़ॉल्ट प्लगइन लक्ष्यों को निष्पादित किया, जो संकलन और जेएआर बनाने जैसी चीजें करते थे।

आइवी के बारे में क्या?

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

मेवेन बनाम चींटी से अधिक महत्वपूर्ण है

  1. क्या आप सॉफ़्टवेयर कलाकृतियों का ट्रैक रखने के लिए एक रिपोजिटरी प्रबंधक का उपयोग करते हैं। मैं नेक्सस डाउनलोड करने का सुझाव दूंगा । आप प्रॉक्सी रिमोट रिपॉजिटरीज़ के लिए नेक्सस का उपयोग कर सकते हैं और अपनी टीम के लिए आंतरिक कलाकृतियों को तैनात करने के लिए एक जगह प्रदान कर सकते हैं।
  2. आपके पास सॉफ़्टवेयर घटकों का उचित मॉड्यूलरेशन है। एक बड़ा मोनोलिथिक घटक समय के साथ शायद ही कभी स्केल करता है। जैसे ही आपकी परियोजना विकसित होती है, आप मॉड्यूल और उप-मॉड्यूल की अवधारणा लेना चाहेंगे। मेवेन खुद को इस दृष्टिकोण पर बहुत अच्छी तरह से उधार देता है।
  3. आप अपने निर्माण के लिए कुछ सम्मेलनों को अपनाते हैं। यहां तक ​​कि यदि आप चींटी का उपयोग करते हैं, तो आपको किसी अन्य प्रकार के सम्मेलन को अपनाने का प्रयास करना चाहिए जो अन्य परियोजनाओं के अनुरूप है। जब कोई प्रोजेक्ट मेवेन का उपयोग करता है, तो इसका मतलब है कि मेवेन से परिचित कोई भी व्यक्ति निर्माण को उठा सकता है और कॉन्फ़िगरेशन के साथ परेशान किए बिना इसके साथ चलना शुरू कर सकता है ताकि यह समझ सके कि संकलन को कैसे प्राप्त किया जाए।




build-management