পিপীলিকা এবং মাভেনের মধ্যে পার্থক্য [বন্ধ]


180

কেউ কি আমাকে অ্যান্ট এবং মাভেনের পার্থক্য বলতে পারে? আমি কখনও ব্যবহার করিনি। আমি বুঝতে পারি যে তারা জাভা প্রকল্পগুলির বিল্ডিংটি স্বয়ংক্রিয় করতে ব্যবহৃত হয়, তবে কোথা থেকে শুরু করব তা আমি জানি না।


4
যেহেতু উত্তরগুলি মাভেন অ্যাডভোকেটদের দ্বারা প্রাধান্য পেয়েছে আমি এটিকে কিছুটা সামঞ্জস্য করতে চাই। উদাহরণস্বরূপ এই উত্তরটি দেখুন stackoverflow.com/questions/1306579/...
পেত্র Gladkikh

4
যদিও এটি অ্যান্ট বনাম মাভেনের তুলনা করার প্রশ্নের সরাসরি উত্তর দেয় না, তবে আমার ইনপুটটি গ্র্যাডল ব্যবহার করা উচিত যা আপনাকে পিঁপড়া এবং মাভেন উভয়কে একই সাথে অ্যাক্সেস দিতে পারে। গ্রেড.অর্গ

উত্তর:


218

ইন ম্যাভেন: নির্দিষ্ট নির্দেশিকা , আমি ভূমিকা অধ্যায় শিরোনাম মধ্যে ম্যাভেন এবং অ্যান্ট এর ভিন্নতা নিয়ে লিখেছিলেন "পিপীলিকা এবং ম্যাভেন মধ্যে পার্থক্য" । এখানে একটি উত্তর যা অতিরিক্ত কিছু নোট সহ সেই পরিচিতির তথ্যের সংমিশ্রণ।

একটি সাধারণ তুলনা

আমি কেবল আপনাকে এই ধারণাটি চিত্রিত করার জন্যই এটি দেখিয়ে দিচ্ছি যে, মৌলিক স্তরে, মাভেন অন্তর্নিহিত সম্মেলনগুলি করেছেন। এখানে একটি সরল পিঁপড়া বিল্ড ফাইল রয়েছে:

<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>

পিঁপড়ার এই সাধারণ উদাহরণে, আপনি কীভাবে পিঁপড়াকে ঠিক কী করতে হবে তা আপনাকে দেখতে হবে। একটি সংকলন লক্ষ্য রয়েছে যা জাভাক টাস্ককে অন্তর্ভুক্ত করে src / main / java ডিরেক্টরিতে উত্সটি লক্ষ্য / শ্রেণি ডিরেক্টরিতে সংকলন করে। আপনাকে এন্টিকে বলতে হবে যে আপনার উত্সটি ঠিক কোথায়, আপনি ফলাফলের বাইকোডটি কোথায় সংরক্ষণ করতে চান এবং কীভাবে এই সমস্তটি একটি জেআর ফাইলে প্যাকেজ করবেন। যদিও সাম্প্রতিক কিছু উন্নয়ন রয়েছে যা পিঁপড়াকে কম প্রক্রিয়াজাতকরণ করতে সহায়তা করে, পিঁপড়ার সাথে একজন বিকাশকারীর অভিজ্ঞতা এক্সএমএলে লিখিত পদ্ধতিগত ভাষার কোডিংয়ে থাকে।

পূর্ববর্তী পিঁপড়ের উদাহরণটি ম্যাভেন উদাহরণের সাথে বিপরীত করুন। মাভেনে, কিছু জাভা উত্স থেকে জেআর ফাইল তৈরি করতে, আপনাকে কেবল একটি সাধারণ পম.এক্সএমএল তৈরি করতে হবে, আপনার উত্স কোডটি $ {ভিত্তিক} / এসসিআর / মেইন / জাভাতে স্থাপন করুন এবং তারপরে কমান্ড লাইন থেকে এমভিএন ইনস্টল চালান is । ম্যাভেন pom.xML উদাহরণ যা একই ফলাফল অর্জন করে।

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

আপনার pom.xml এ যা আপনার প্রয়োজন। কমান্ড লাইন থেকে এমভিএন ইনস্টল চালানো সংস্থানগুলি, সংকলন উত্স, ইউনিট পরীক্ষাগুলি কার্যকর করতে, একটি জেআর তৈরি করবে এবং অন্যান্য প্রকল্পগুলিতে পুনরায় ব্যবহারের জন্য স্থানীয় সংগ্রহস্থলে জেআর ইনস্টল করবে। কোনও পরিবর্তন ছাড়াই, আপনি এমভিএন সাইট চালাতে পারেন এবং তারপরে লক্ষ্য / সাইটে একটি সূচি html ফাইল খুঁজে পেতে পারেন যা জাভডকের লিঙ্ক এবং আপনার উত্স কোড সম্পর্কে কয়েকটি প্রতিবেদন রয়েছে।

স্বীকার করা, এটি সহজতম সম্ভাব্য উদাহরণ প্রকল্প। এমন একটি প্রকল্প যার মধ্যে কেবল উত্স কোড থাকে এবং এটি একটি জেআর উত্পাদন করে। এমন একটি প্রকল্প যা মাভেন সম্মেলন অনুসরণ করে এবং কোনও নির্ভরতা বা কাস্টমাইজেশন প্রয়োজন হয় না। যদি আমরা আচরণটি কাস্টমাইজ করা শুরু করতে চাইতাম, তবে আমাদের pom.xML আকারে বাড়তে চলেছে এবং সবচেয়ে বড় প্রকল্পে আপনি খুব জটিল ম্যাভেন পিওএমগুলির সংগ্রহ দেখতে পারেন যা প্লাগইন কাস্টমাইজেশন এবং নির্ভরতা ঘোষণার জন্য একটি দুর্দান্ত চুক্তি রয়েছে। তবে, আপনার প্রকল্পের পিওএম ফাইলগুলি আরও বেশি পরিমাণে পরিণত হওয়ার পরেও তারা পিপড়া ব্যবহার করে একই আকারের প্রকল্পের বিল্ড ফাইল থেকে সম্পূর্ণ ভিন্ন ধরণের তথ্য ধারণ করে। ম্যাভেন পিওএমগুলিতে ঘোষণা রয়েছে: "এটি একটি জএআর প্রকল্প", এবং "উত্স কোডটি এসসিআর / প্রধান / জাভাতে রয়েছে"। পিপড়া বিল্ড ফাইলগুলিতে স্পষ্ট নির্দেশাবলী থাকে: "এটি প্রকল্প", "src/main/java"," javacএই ডিরেক্টরিটির বিরুদ্ধে চালান "," ফলাফলগুলি রাখুন target/classses"," .... থেকে একটি জেআর তৈরি করুন .... "ইত্যাদি etc. যেখানে পিঁপড়াটিকে প্রক্রিয়াটি সম্পর্কে স্পষ্ট করে বলতে হয়েছিল, সেখানে মাভেনের কাছে কিছু" বিল্ট-ইন "ছিল was এটি কেবল জানত যে উত্স কোডটি কোথায় ছিল এবং কীভাবে এটি প্রক্রিয়া করা উচিত।

উচ্চ স্তরের তুলনা

এই উদাহরণে পিঁপড়া এবং মাভেনের মধ্যে পার্থক্য? অ্যান্ট ...

  • একটি সাধারণ প্রকল্প ডিরেক্টরি কাঠামোর মতো আনুষ্ঠানিক কনভেনশন নেই, আপনাকে পিঁপড়াকে ঠিক বলতে হবে কোথায় উত্সটি সন্ধান করতে হবে এবং আউটপুটটি কোথায় রাখবে। সময়ের সাথে সাথে অনানুষ্ঠানিক সম্মেলনগুলি উত্থিত হয়েছে, তবে সেগুলি পণ্যটিতে কোড করা হয়নি।
  • পদ্ধতিগত, আপনাকে পিঁপড়াকে ঠিক কী করণীয় এবং কখন এটি করতে হবে তা জানাতে হবে। আপনাকে এটি সংকলন করতে বলতে হয়েছিল, তারপরে অনুলিপি করতে হবে, তারপরে সঙ্কুচিত করতে হবে।
  • একটি জীবনচক্র নেই, আপনাকে লক্ষ্য এবং লক্ষ্য নির্ভরতা নির্ধারণ করতে হয়েছিল। আপনাকে প্রতিটি লক্ষ্যে ম্যানুয়ালি কাজের ক্রম সংযুক্ত করতে হয়েছিল।

মাভেন কোথায় ...

  • কনভেনশন রয়েছে, এটি ইতিমধ্যে জানত যে আপনার উত্স কোডটি ছিল কারণ আপনি সম্মেলনটি অনুসরণ করেছিলেন। এটি লক্ষ্য / শ্রেণিতে বাইটকোড রেখেছিল এবং এটি লক্ষ্য হিসাবে একটি জেআর ফাইল তৈরি করে।
  • ঘোষিত হয়। আপনাকে যা করতে হবে তা হ'ল একটি pom.xML ফাইল তৈরি করে আপনার উত্সটি ডিফল্ট ডিরেক্টরিতে রেখে দেওয়া হয়েছিল put মাভেন বাকিদের যত্ন নিলেন।
  • একটি জীবনচক্র রয়েছে, যা আপনি মৃত্যুদন্ড কার্যকর করার সময় অনুরোধ করেছিলেন mvn install। এই কমান্ডটি মাভেনকে লাইফসাইলে না পৌঁছে অবধি ধারাবাহিক পদক্ষেপের একটি ধারাবাহিকটি সম্পাদন করতে বলেছিল। জীবনচক্রের মাধ্যমে এই যাত্রার পার্শ্ব-প্রতিক্রিয়া হিসাবে, মাভেন কয়েকটি ডিফল্ট প্লাগইন লক্ষ্যগুলি কার্যকর করেছিলেন যা সংকলন এবং একটি জেআর তৈরির মতো কাজগুলি করেছিল।

আইভির কী হবে?

ঠিক আছে, সুতরাং স্টিভ লৌরানের মতো কেউ সেই তুলনাটি পড়তে এবং ফাউল কল করতে চলেছে। তিনি কীভাবে উত্তরটি আইভী নামক কিছুটিকে পুরোপুরি উপেক্ষা করে এবং এন্টির আরও সাম্প্রতিক প্রকাশগুলিতে পিঁপড়াটি যুক্তি যুক্তির পুনরায় ব্যবহার করতে পারে তা এই বিষয়ে কথা বলতে যাচ্ছেন। এটা সত্য. আপনার যদি অ্যান্ট + অ্যান্টলিবস + আইভী ব্যবহার করে স্মার্ট লোকের একগুচ্ছ থাকে, আপনি কাজ করে এমন একটি ভাল ডিজাইন তৈরি শেষ করবেন। তবুও, আমি খুব দৃ Ma়ভাবে নিশ্চিত হয়েছি যে মাভেন বুদ্ধিমান হয়েছে, আমি আনন্দের সাথে আন্ত + আইভিকে এমন একটি প্রকল্প দলের সাথে ব্যবহার করব যার খুব ধারালো বিল্ড ইঞ্জিনিয়ার রয়েছে। বলা হচ্ছে, আমি মনে করি আপনি জেটি প্লাগইনের মতো অনেক মূল্যবান প্লাগইন হারিয়ে ফেলবেন এবং আপনি পুরো কাজটি শেষ করবেন যা আপনাকে সময়ের সাথে করার দরকার নেই।

ম্যাভেন বনাম পিঁপড়ার চেয়েও গুরুত্বপূর্ণ

  1. আপনি কি সফ্টওয়্যার শিল্পকর্মগুলির ট্র্যাক রাখতে একটি সংগ্রহস্থল পরিচালক ব্যবহার করেন Manager আমি নেক্সাস ডাউনলোড করার পরামর্শ দিচ্ছি । প্রক্সি দূরবর্তী সংগ্রহস্থলগুলিতে এবং আপনার দলের অভ্যন্তরীণ নিদর্শনগুলি স্থাপন করার জন্য একটি স্থান সরবরাহ করতে আপনি নেক্সাস ব্যবহার করতে পারেন।
  2. আপনার কাছে সফ্টওয়্যার উপাদানগুলির উপযুক্ত মডুলারাইজেশন রয়েছে। একটি বড় একশক্তি উপাদান সময়ের সাথে সাথে খুব কমই স্কেল করে। আপনার প্রকল্পটি বিকাশের সাথে সাথে আপনার কাছে মডিউল এবং উপ-মডিউলগুলির ধারণা থাকতে হবে। ম্যাভেন এই পদ্ধতির কাছে নিজেকে খুব ভাল ধার দেয়।
  3. আপনি আপনার বিল্ডের জন্য কিছু কনভেনশন গ্রহণ করেন। এমনকি আপনি পিঁপড়া ব্যবহার করলেও আপনার এমন কিছু কনভেনশন গ্রহণ করার প্রচেষ্টা করা উচিত যা অন্যান্য প্রকল্পের সাথে সামঞ্জস্যপূর্ণ। যখন কোনও প্রকল্প মাভেনকে ব্যবহার করে, তার অর্থ হল যে মাভেনের সাথে পরিচিত কোনও ব্যক্তি কীভাবে সংকলনটি পাবেন তা নির্ধারণের জন্য কনফিগারেশনের সাথে ঝাঁকুনি ছাড়াই বিল্ডটি বেছে নিতে এবং এটির সাথে চলতে শুরু করতে পারেন।

1
লিঙ্কগুলি আবার ভেঙে গেছে।
থান্ডারফোর্জ

1
আমি কোনও টিউনিং (নেটবিন কনভেনশনস) ছাড়াই ডিফল্টরূপে নিবিয়ানস এবং পিঁপড়ার কাজগুলি ব্যবহার করি। বর্তমানে মাভেনের চেষ্টা করছেন এবং প্রথম নির্মাণের সময় এবং ক্রমাগত ইন্টারনেট সংযোগ ব্যবহারের সময় এটি আরও দীর্ঘতর সন্ধান করুন। অফলাইন নির্মাণ সম্ভবত অসম্ভব। এটি অস্বস্তিকর।
জোন

113

ম্যাভেন একটি ফ্রেমওয়ার্ক, পিঁপড়া একটি টুলবক্স box

মাভেন একটি পূর্ব-নির্মিত রাস্তা গাড়ি, যেখানে পিঁপড়া গাড়ির যন্ত্রাংশের একটি সেট। পিঁপড়ার সাহায্যে আপনাকে নিজের গাড়ি তৈরি করতে হবে, তবে কমপক্ষে কোনও অফ-রোড ড্রাইভিং করার প্রয়োজন হলে আপনি সঠিক ধরণের গাড়ি তৈরি করতে পারেন।

এটি অন্য উপায়ে বলতে গেলে, মাভেন হ'ল একটি কাঠামো যেখানে পিঁপড়া একটি সরঞ্জাম বাক্স। যদি আপনি ফ্রেমওয়ার্কের সীমার মধ্যে কাজ করে সন্তুষ্ট হন তবে মাভেন ঠিকঠাক করবেন। আমার সমস্যাটি হ'ল আমি ফ্রেমওয়ার্কের সীমানায় intoুকে পড়েছিলাম এবং এটি আমাকে ছাড়তে দেয় না।

এক্সএমএল ভার্বোসিটি

টোব্রায়েন এমন এক ব্যক্তি যিনি মাভেন সম্পর্কে অনেক কিছু জানেন এবং আমি মনে করি তিনি দুটি পণ্যগুলির মধ্যে খুব ভাল, সৎ তুলনা করেছিলেন। তিনি একটি সাধারণ ম্যাভেন পম.এক্সএমএলকে একটি সরল পিঁপড়া বিল্ড ফাইলের সাথে তুলনা করেছিলেন এবং তিনি কীভাবে মাভেন প্রকল্পগুলি আরও জটিল হয়ে উঠতে পারেন তার উল্লেখ করেছিলেন। আমি মনে করি যে আপনি কয়েকটি সাধারণ বাস্তব-প্রকল্পে সম্ভবত এমন কয়েকটি ফাইলের তুলনা দেখেছেন যা আপনি দেখতে পাচ্ছেন। নীচের ফাইলগুলি বহু-মডিউল বিল্ডে একটি একক মডিউল উপস্থাপন করে।

প্রথমত, ম্যাভেন ফাইল:

<project 
    xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-4_0_0.xsd">

    <parent>
        <groupId>com.mycompany</groupId>
        <artifactId>app-parent</artifactId>
        <version>1.0</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>persist</artifactId>
    <name>Persistence Layer</name>

    <dependencies>

        <dependency>
            <groupId>com.mycompany</groupId>
            <artifactId>common</artifactId>
            <scope>compile</scope>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>com.mycompany</groupId>
            <artifactId>domain</artifactId>
            <scope>provided</scope>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate</artifactId>
            <version>${hibernate.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>${commons-lang.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
            <version>${spring.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.dbunit</groupId>
            <artifactId>dbunit</artifactId>
            <version>2.2.3</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>${testng.version}</version>
            <scope>test</scope>
            <classifier>jdk15</classifier>
        </dependency>

        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>${commons-dbcp.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc</artifactId>
            <version>${oracle-jdbc.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymock</artifactId>
            <version>${easymock.version}</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

</project>

এবং সমতুল্য পিঁপড়া ফাইল:

<project name="persist" >

    <import file="../build/common-build.xml" />


    <path id="compile.classpath.main">
        <pathelement location="${common.jar}" />
        <pathelement location="${domain.jar}" />
        <pathelement location="${hibernate.jar}" />
        <pathelement location="${commons-lang.jar}" />
        <pathelement location="${spring.jar}" />
    </path>


    <path id="compile.classpath.test">
        <pathelement location="${classes.dir.main}" />
        <pathelement location="${testng.jar}" />
        <pathelement location="${dbunit.jar}" />
        <pathelement location="${easymock.jar}" />
        <pathelement location="${commons-dbcp.jar}" />
        <pathelement location="${oracle-jdbc.jar}" />
        <path refid="compile.classpath.main" />
    </path>


    <path id="runtime.classpath.test">
        <pathelement location="${classes.dir.test}" />
        <path refid="compile.classpath.test" />
    </path>


</project>

টোব্রায়েন তার উদাহরণটি ব্যবহার করে দেখিয়েছিলেন যে মাভেন অন্তর্নিহিত কনভেনশন করেছেন তবে এর অর্থ এই নয় যে আপনি কম এক্সএমএল লিখেছেন। আমি বিপরীতটি সত্য বলে খুঁজে পেয়েছি। Pom.xML বিল্ড.এক্সএমএল থেকে 3 গুণ বেশি লম্বা এবং এটি সম্মেলনগুলি থেকে বিপথগামী না হয়ে। আসলে, আমার মাভেন উদাহরণটি অতিরিক্ত 54 টি লাইন ছাড়াই দেখানো হয়েছে যা প্লাগইনগুলি কনফিগার করার জন্য প্রয়োজনীয় ছিল। সেই pom.xML একটি সাধারণ প্রকল্পের জন্য। আপনি অতিরিক্ত প্রয়োজনীয়তা যুক্ত করতে শুরু করলে এক্সএমএলটি সত্যই তাৎপর্যপূর্ণভাবে বৃদ্ধি পেতে শুরু করে, যা অনেক প্রকল্পের জন্য সাধারণের বাইরে নয়।

তবে আপনাকে পিঁপড়াকে কী করতে হবে তা জানাতে হবে

উপরে আমার পিঁপড়া উদাহরণ অবশ্যই সম্পূর্ণ নয়। আমাদের এখনও পরিষ্কার, সংকলন, পরীক্ষা ইত্যাদির লক্ষ্যে নির্ধারিত লক্ষ্যগুলি নির্ধারণ করতে হবে এগুলি একটি সাধারণ বিল্ড ফাইলে সংজ্ঞায়িত করা হয় যা মাল্টি-মডিউল প্রকল্পের সমস্ত মডিউল দ্বারা আমদানি করা হয়। যা আমাকে এই বিষয়টিতে নিয়ে যায় যে কীভাবে এই সমস্ত স্টাফটি স্পষ্টভাবে পিঁপড়ে লিখতে হবে যেখানে এটি মাভেনে ঘোষিত।

সত্য, এটি আমার সময় সাশ্রয় করবে যদি আমাকে এই পিঁপড়া লক্ষ্যগুলি স্পষ্টভাবে লিখতে না হয়। তবে কত সময়? আমি এখন যে সাধারণ বিল্ড ফাইলটি ব্যবহার করি তা হ'ল এটি আমি 5 বছর আগে লিখেছিলাম কেবল তখন থেকে কেবলমাত্র কিছু সংশোধন নিয়ে। মাভেনের সাথে আমার 2 বছরের পরীক্ষা-নিরীক্ষার পরে, আমি পুরানো পিঁপড়া বিল্ড ফাইলটি পায়খানা থেকে বের করে এনে ধুলো ফেলেছি এবং এটিকে আবার কাজে লাগিয়েছি। আমার জন্য, আন্তিকে কী করতে হবে তা স্পষ্টভাবে জানাতে হবে এর ব্যয়টি পাঁচ বছরের একটি সময়কালে এক সপ্তাহেরও কম সময় জুড়েছে।

জটিলতা

পরবর্তী উল্লেখযোগ্য পার্থক্য যা আমি উল্লেখ করতে চাই তা হ'ল জটিলতা এবং আসল-বিশ্ব প্রভাব এটি। ম্যাভেন বিল্ড প্রসেস তৈরি ও পরিচালনার দায়িত্ব দেওয়া বিকাশকারীদের কাজের চাপ হ্রাস করার অভিপ্রায় নিয়ে নির্মিত হয়েছিল। এটি করার জন্য এটি জটিল হতে হবে। দুর্ভাগ্যক্রমে জটিলতা তাদের লক্ষ্যযুক্ত লক্ষ্যটিকে প্রত্যাখ্যান করে।

অ্যান্টের সাথে তুলনা করা হলে, মাভেন প্রকল্পের বিল্ড গাই আরও বেশি সময় ব্যয় করবে:

  • ডকুমেন্টেশন পড়া: মাভেনের আরও অনেকগুলি ডকুমেন্টেশন রয়েছে কারণ আপনার আরও অনেক কিছু শেখার দরকার রয়েছে।
  • দলের সদস্যদের শিক্ষিত করা: তারা নিজেরাই উত্তর খোঁজার চেষ্টা করার চেয়ে যিনি জানেন তাকে জিজ্ঞাসা করা তাদের পক্ষে সহজ মনে হয়।
  • বিল্ডটি সমস্যা সমাধানের: মাউন্ট পিঁপড়ের চেয়ে কম নির্ভরযোগ্য, বিশেষত নন-কোর প্লাগইনগুলি। এছাড়াও, মাভেন বিল্ডগুলি পুনরাবৃত্তিযোগ্য নয়। আপনি যদি কোনও প্লাগইনের একটি এসএনএপশট সংস্করণটির উপর নির্ভর করেন যা খুব সম্ভবত, আপনার বিল্ডটি কোনও পরিবর্তন না করেই ভেঙে যেতে পারে।
  • মাভেন প্লাগইন লিখন: প্লাগইনগুলি সাধারণত একটি নির্দিষ্ট কাজকে মাথায় রেখেই লেখা হয়, যেমন একটি ওয়েবস্টার্ট বান্ডিল তৈরি করুন, যা তাদেরকে অন্য কাজের জন্য পুনরায় ব্যবহার করা বা লক্ষ্য অর্জনের জন্য তাদের একত্রিত করা আরও কঠিন করে তোলে। সুতরাং আপনাকে বিদ্যমান প্লাগইন সেটে কাজের ফাঁকে ফাঁকে নিজের একটি লিখতে হতে পারে।

বিপরীতে:

  • পিপীলিকা ডকুমেন্টেশন সংক্ষিপ্ত, বিস্তৃত এবং সমস্ত এক জায়গায়।
  • পিপড়া সহজ। একজন নতুন বিকাশকারীকে পিঁপড়া শিখার চেষ্টা করছে তাদের বাকী যা জানা দরকার তা নির্ধারণের জন্য কয়েকটি সাধারণ ধারণা (লক্ষ্য, কার্য, নির্ভরতা, বৈশিষ্ট্য) বোঝার দরকার পড়ে।
  • পিপড়া নির্ভরযোগ্য। গত কয়েক বছর ধরে অ্যান্টের খুব বেশি প্রকাশ হয়নি কারণ এটি ইতিমধ্যে কাজ করে।
  • পিপীলিকা বিল্ডগুলি পুনরাবৃত্তিযোগ্য কারণ এগুলি সাধারণত কোনও বাহ্যিক নির্ভরতা ছাড়াই তৈরি করা হয়, যেমন অনলাইন সংগ্রহস্থল, পরীক্ষামূলক তৃতীয় পক্ষের প্লাগইন ইত্যাদি without
  • পিঁপড়া ব্যাপক। এটি একটি সরঞ্জামবাক্স হওয়ায় আপনি যে কোনও কাজটি করতে চান তা সম্পাদনের জন্য আপনি সরঞ্জামগুলি একত্রিত করতে পারেন। আপনার যদি নিজের কাস্টম টাস্কটি লেখার প্রয়োজন হয় তবে তা করা খুব সহজ।

ঘনিষ্ঠতা

আর একটি পার্থক্য হ'ল পরিচিতি। নতুন বিকাশকারীদের সর্বদা গতিতে উঠতে সময় প্রয়োজন। বিদ্যমান পণ্যগুলির সাথে পরিচিতি সে ক্ষেত্রে সহায়তা করে এবং মাভেন সমর্থকরা যথাযথভাবে দাবি করেন যে এটি ম্যাভেনের উপকার। অবশ্যই, পিঁপড়ের নমনীয়তাটির অর্থ হল আপনার পছন্দসই কনভেনশন আপনি তৈরি করতে পারবেন। সুতরাং আমি যে কনভেনশনটি ব্যবহার করি তা হ'ল আমার উত্স ফাইলগুলি ডিরেক্টরি ডিরেক্টরিতে এসসিআর / প্রধান / জাভা স্থাপন করা। আমার সংকলিত ক্লাস লক্ষ্য / ক্লাস নামের একটি ডিরেক্টরিতে যায়। চেনা লাগছে না।

আমি মাভেন দ্বারা ব্যবহৃত ডিরেক্টরি কাঠামো পছন্দ করি। আমি এটা জ্ঞান করে তোলে মনে করি। এছাড়াও তাদের বিল্ড লাইফাইসাইকেল। সুতরাং আমি আমার পিঁপড়া বিল্ডগুলিতে একই সম্মেলনগুলি ব্যবহার করি। এটি বোঝার জন্য নয় কেবল এটিই নয় কারণ এটি যে কেউ এর আগে মাভেনকে ব্যবহার করেছে তার সাথে পরিচিত হবে।


7
আমি সত্যিই পছন্দ করি আপনি কীভাবে ম্যাভেনের কাছ থেকে ধারণাগুলি "চুরি করেছেন" এবং সাধারণ কনভেনশনগুলি অনুসরণ করতে এবং অন্যের জন্য রূপান্তর সহজতর করার জন্য আপনার পিঁপড়া তৈরি করে সেগুলিতে সেগুলি প্রয়োগ করেন।
ইগর Čordaš

pom.xmlগুলি প্রসারণ এড়াতে , আমি তাদের বেশিরভাগ এক্সএসএলটি এর মাধ্যমে উত্পন্ন করি।
ডেমি

21

পিঁপড়া মূলত একটি বিল্ড হাতিয়ার।

ম্যাভেন একটি প্রকল্প এবং নির্ভরতা পরিচালনার সরঞ্জাম (অবশ্যই আপনার প্রকল্পটিও তৈরি করে)।

আপনি যদি মাভেনকে এড়াতে চান তবে পিপীলিকা + আইভির একটি খুব ভাল সমন্বয়।


এই. এন্টি + আইভি এবং মাভেন 2 এর সাথে এখানে তুলনা করুন: ant.apache.org/ivy/m2compistance.html
এসকো

আপনি কেন মাভেনকে এড়াতে চান? ম্যাভেন আমার অভিজ্ঞতায় জাভা বিকাশের কয়েকটি অংশের মধ্যে একটি যা মনোরম।
বেনসন

4
@ বেনসন: এটি একটি বিতর্কিত বিষয়। এটি যদি সিলভার বুলেট হয় তবে সবাই এটি ব্যবহার করবে।
চেরোভিম

18

কেবল আরও কিছু পার্থক্য তালিকা করতে:

  • পিঁপড়ার আনুষ্ঠানিক সম্মেলন নেই। আপনাকে পিঁপড়াকে ঠিক বলতে হবে কোথায় উত্সটি সন্ধান করতে হবে, আউটপুটগুলি কোথায় রাখবে ইত্যাদি
  • পিঁপড়া প্রক্রিয়াজাতীয়। আপনাকে পিঁপড়াকে ঠিক কী করতে হবে তা বলতে হবে; এটি সংকলন করতে, অনুলিপি করতে, তারপরে সংক্ষেপণ ইত্যাদি বলুন
  • পিপীলিকার একটি জীবনচক্র নেই।
  • মাভেন কনভেনশন ব্যবহার করেন। আপনি যতক্ষণ এই কনভেনশনগুলি অনুসরণ করেন ততক্ষণ এটি আপনার সোর্স কোডটি স্বয়ংক্রিয়ভাবে কোথায় তা জানে। মাভেন কোথায় আছে তা আপনাকে জানাতে হবে না।
  • মাভেন ঘোষিত; আপনাকে যা করতে হবে তা হ'ল একটি পম.এক্সএমএল ফাইল তৈরি করা এবং আপনার উত্সটি ডিফল্ট ডিরেক্টরিতে রেখে দেওয়া। মাভেন বাকিদের যত্ন নেবেন।
  • মাভেনের একটি জীবনচক্র রয়েছে। আপনি কেবল এমভিএন ইনস্টল কল করেন এবং ধারাবাহিক পদক্ষেপের একটি সিরিজ কার্যকর করা হয়।
  • প্রকল্পের সাধারণ কাজগুলি সম্পর্কে মাভেনের বুদ্ধি রয়েছে। পরীক্ষা চালানোর জন্য , যতক্ষণ না ফাইলগুলি ডিফল্ট অবস্থানে থাকে ততক্ষণ এমভিএন পরীক্ষা চালান । পিঁপড়ে, আপনাকে প্রথমে JUnit JAR ফাইলটি করতে হবে, তারপরে একটি ক্লাসপথ তৈরি করতে হবে যার মধ্যে JUnit JAR রয়েছে, তারপরে পিপীলিকাটি যেখানে পরীক্ষা উত্স কোডটি সন্ধান করতে হবে তা বলুন, একটি লক্ষ্য লিখুন যা পরীক্ষার উত্সকে সংকলন করে এবং শেষ পর্যন্ত ইউনিট পরীক্ষাগুলি সম্পাদন করে JUnit সহ।

হালনাগাদ:

এটি ম্যাভেন থেকে এসেছে : সংজ্ঞা নির্দেশিকা । দুঃখিত, আমি এটি উদ্ধৃত করতে পুরোপুরি ভুলে গেছি।


যে আপডেট ছিল একটি দণ্ড?
ভাকিও

1
@ ব্যাখিও - আমি আপনার অর্থ অনুমান করতে যাচ্ছি কারণ আমি "সাইট" ব্যবহার না করে "সাইট" ব্যবহার করেছি? এটি আমার পক্ষে পুরোপুরি একটি খারাপ বানান ছিল এবং আমি এটিকে ঠিক করেছি
Ascalonian

17

মাভেন না পিঁপড়ে? এটি একটি খুব অনুরূপ প্রশ্ন, যা আপনাকে আপনার প্রশ্নের উত্তর দিতে সহায়তা করবে।

মাভেন কী? অফিসিয়াল সাইটে।

সম্পাদনা: নতুন / গ্রিনফিল্ড প্রকল্পের জন্য, আমি মাভেন ব্যবহার করার পরামর্শ দিচ্ছি: "কনফিগারেশন ওভার কনফিগারেশন" আপনাকে বিল্ড এবং ডিপ্লোয়মেন্ট স্ক্রিপ্টগুলি লেখার ক্ষেত্রে এবং সেটআপ করার ক্ষেত্রে একটি শালীন সময় সাশ্রয় করবে। আপনি যখন পিঁপড়া ব্যবহার করেন তখন বিল্ড স্ক্রিপ্ট দৈর্ঘ্য এবং জটিলতায় সময়ের সাথে সাথে বৃদ্ধি পেতে থাকে। বিদ্যমান প্রকল্পগুলির জন্য, তাদের কনফিগারেশন / লেআউটটি মাভেন সিস্টেমে জুতো ছড়িয়ে দেওয়া কঠিন can


ম্যাভেন আপনার প্রকল্পের শুরুতে আপনার সময় সাশ্রয় করবে কিন্তু সময়ের সাথে সাথে যদি আপনার খুব সাধারণ প্রকল্প ব্যতীত অন্য কিছু থাকে তবে ম্যাভেন স্ক্রিপ্টগুলি পিঁপড়ার সমপরিমাণের চেয়ে অনেক জটিল হয়ে উঠবে। উদাহরণস্বরূপ, মাভেন অ্যাসেম্বলি প্লাগইনটি দেখুন।
কেভিন স্টেমব্রিজ

আমি যুক্তি দিয়ে বলতে পারি যে অ্যাসেম্বলি প্লাগইন যা করে তা সম্পাদন করা তার মাভেন ফর্ম্যাটে (যেখানে আপনি অ্যাসেম্বলির মডেলটি এক্সএমএল ফর্ম্যাটে রেখেছেন) এন্টিতে সমস্ত ম্যানুয়াল পদক্ষেপগুলি করার চেয়ে, তবে ওয়াইএমএমভি
ম্যাট বি

হাই ম্যাট, অ্যাসেম্বলি প্লাগইনটির জন্য শেখার বক্রিটি পিঁপড়ের টার বা জিপ কার্যের চেয়ে অনেক বেশি খাড়া। বর্ণনাকারী ফর্ম্যাটটি 150 লাইনের মতো কিছু এবং এতে অন্তর্নিহিত কনফিগারেশন বিকল্পগুলির পুরো গোছা রয়েছে। তার উপরে, এটি কাজ করে না! আমি অ্যাসেম্বলি প্লাগইনটি ছেড়ে দিয়েছিলাম, আনপ্যাকে ফিল্টারিং কাজ করে না এবং ফাইল মোড বিকল্পগুলিও ব্যবহার করে না এবং এটি ঠিক করতে পারে না lf "এন্টিতে সমস্ত ম্যানুয়াল পদক্ষেপ" বলতে আপনার অর্থ কী তা নিশ্চিত নন। অ্যান্ট অ্যাসেম্বলি প্লাগইনটি কয়েক ঘণ্টার মধ্যে করতে পারি না এমন কাজ করতে আমি প্রায় 5 মিনিট সময় কাটিয়েছি।
কেভিন স্টেমব্রিজ

3
প্রথম লিঙ্কটি এখন মারা গেছে: /
ম্যাট ক্লার্ক 18

15

ম্যাভেন উভয় নির্ভরতা পরিচালনার সরঞ্জাম হিসাবে কাজ করে - এটি কোনও কেন্দ্রীয় সংগ্রহশালা বা আপনার স্থাপন করা একটি সংগ্রহস্থল থেকে জারগুলি পুনরুদ্ধার করতে - এবং একটি ঘোষিত বিল্ড সরঞ্জাম হিসাবে ব্যবহার করা যেতে পারে। একটি "ঘোষিত" বিল্ড টুল এবং আরও বেশি traditionalতিহ্যবাহী পিঁপড়া বা মেকের মধ্যে পার্থক্য হ'ল কী করা দরকার তা কনফিগার করা, এটি কীভাবে হয় না। উদাহরণস্বরূপ, আপনি একটি খাঁটি স্ক্রিপ্টে বলতে পারেন যে কোনও প্রকল্পকে ওয়ার ফাইল হিসাবে প্যাকেজ করা উচিত, এবং ম্যাভেন কীভাবে এটি পরিচালনা করতে জানে।

মাভেন এর "ঘোষণা" অর্জনের জন্য কীভাবে প্রকল্পের ডিরেক্টরিগুলি নির্ধারণ করা হয় সে সম্পর্কে কনভেনশনের উপর নির্ভর করে। উদাহরণস্বরূপ, এটিতে আপনার মূল কোডটি কোথায় রাখবেন, কোথায় আপনার ওয়েব.এক্সএমএল স্থাপন করতে হবে, আপনার ইউনিট পরীক্ষা করা হবে এবং এর জন্য একটি কনভেনশন রয়েছে তবে আপনার প্রয়োজন হলে সেগুলি পরিবর্তন করার ক্ষমতাও দেয়।

আপনার মনে রাখতে হবে যে মাভেনের মধ্যে থেকে পিপীলিকা কমান্ডগুলি চালনার জন্য একটি প্লাগইন রয়েছে:

http://maven.apache.org/plugins/maven-ant-plugin/

এছাড়াও, ম্যাভেনের প্রত্নতাত্ত্বিক ধরণগুলি খুব দ্রুত একটি প্রকল্পের সাথে শুরু করা তৈরি করে। উদাহরণস্বরূপ, একটি উইকেট আরচাইটিপ রয়েছে, যা একটি সম্পূর্ণ, প্রস্তুত-তে-চালিত হ্যালো ওয়ার্ল্ড-টাইপ প্রজেক্ট পাওয়ার জন্য আপনি চালাচ্ছেন এমন একটি মাভেন কমান্ড সরবরাহ করে।

https://wicket.apache.org/start/quickstart.html


11

আমি এমন কোনও ব্যক্তিকে নিতে পারি যা কখনও পিঁপড়াকে দেখেনি - এর build.xmlগুলি যুক্তিসঙ্গতভাবে ভাল লেখা আছে - এবং তারা বুঝতে পারে কী চলছে। আমি সেই একই ব্যক্তিকে নিতে পারি এবং তাদের একটি ম্যাভেন পিওএম দেখাতে পারি এবং কী চলছে তা তাদের কোনও ধারণা নেই।

একটি ইঞ্জিনিয়ারিং সংস্থায় যে বিশাল, লোকেরা পিঁপড়ের ফাইলগুলি বড় এবং অযৌক্তিকভাবে পরিণত হওয়ার বিষয়ে লিখেন। আমি এই ধরণের লিখেছি এবং পিপীলিকার স্ক্রিপ্টগুলি পরিষ্কার করেছি । আপনার এগিয়ে যাওয়া এবং টেমপ্লেটের একটি সেট ডিজাইন করার দরকার যা 3+ বছরের সময়কালে পরিবর্তনের প্রতিক্রিয়া জানাতে পারে এবং স্কেল করতে পারে তা সত্যই বুঝতে পেরেছি।

আপনার যদি একটি সহজ প্রকল্প না থাকে তবে ম্যাভেন কনভেনশনগুলি এবং জিনিসগুলি সম্পন্ন করার জন্য মাভেনের উপায় শিখতে কাজটি বেশ খানিকটা কাজ।

দিনের শেষে আপনি পিঁপড়া বা মাভেনের সাথে প্রকল্পের সূচনাটিকে কোনও ফ্যাক্টর হিসাবে বিবেচনা করতে পারবেন না: এটি সত্যই মালিকানার মোট ব্যয়। প্রতিষ্ঠানের জন্য কয়েক বছর ধরে এটির বিল্ড সিস্টেম বজায় রাখতে এবং প্রসারিত করতে যা গ্রহণ করা হয় তা অন্যতম প্রধান কারণ যা বিবেচনা করা উচিত is

বিল্ড সিস্টেমের সর্বাধিক গুরুত্বপূর্ণ বিষয়গুলি হ'ল বিল্ড রেসিপিটি প্রকাশের ক্ষেত্রে নির্ভরতা পরিচালনা এবং নমনীয়তা। এটি ভাল করার সময় কিছুটা স্বজ্ঞাত হতে হবে।


6

আমি বলব এটি আপনার প্রকল্পের আকারের উপর নির্ভর করে ... ব্যক্তিগতভাবে, আমি মাভেনকে এমন সরল প্রকল্পগুলির জন্য ব্যবহার করতাম যার জন্য সহজবোধ্য সংকলন, প্যাকেজিং এবং স্থাপনার প্রয়োজন। যত তাড়াতাড়ি আপনার আরও কিছু জটিল জিনিস করা দরকার (অনেক নির্ভরতা, ম্যাপিং ফাইল তৈরি করা ...), আমি পিপড়ে স্যুইচ করব ...


আমি একমত নই আমি সম্মত হই যে সাধারণ প্রকল্পগুলির জন্য খাঁটি ব্যবহার করা ভাল, তবে আমি যুক্তি দিয়ে বলব যে জটিলতার সাথে তীব্রতার অর্ডার দ্বারা খাঁটি বৃদ্ধি ব্যবহার করে আপনার সুবিধা।
বেনসন

আমি পাশাপাশি একমত নই, আপনি যখন অনেকগুলি আন্তঃসম্পর্কিত মডিউল সহ আরও জটিল সিস্টেম পাবেন তখন মাভেন সত্যিই ভাল কাজ শুরু করে। যদি আপনার কোনও কার্যকরী পরীক্ষা লিখতে হবে, প্রতিবেদনগুলি চালাবেন এবং কোনও সংগ্রহস্থল পরিচালকের কাছে নিদর্শনগুলি স্থাপন করা দরকার হয় তবে আপনি এন্টি দিয়ে নিজেরাই কেন সব করবেন?
টিম ও ব্রায়ান

মাভেন একটি সাধারণ প্রকল্পের জন্য ঠিক আছে, তবে আমি আরও জটিল প্রকল্পে সহজ হওয়া উচিত এমন কিছু করার চেষ্টা করার একটি দুঃস্বপ্ন দেখেছিলাম। যেমন একটি বিতরণযোগ্য প্যাকেজ তৈরি করা, কোডকে অবহেলা করে একটি ওয়েবস্টার্ট বান্ডিল তৈরি করা, প্রোফাইলগুলি কনফিগার করা। @ বেনসন, আপনার প্রকল্পটি আরও জটিল হওয়ার সাথে সাথে ম্যাভেন একটি বল এবং চেইন হয়ে উঠবে। এন্টির শক্তি এবং নমনীয়তা আপনাকে মাভেনের চেয়ে বেশি উত্পাদনশীলতার সুবিধা দেবে। @ টোব্রায়েন, পিঁপড়া মাল্টি-মডিউল প্রকল্পগুলির জন্য ঠিকঠাক কাজ করে, কার্যকরী পরীক্ষাগুলি লেখেন ইত্যাদি Ma
কেভিন স্টেমব্রিজ

আমি সবেমাত্র একটি বিদ্যমান প্রকল্পে মাভেন যুক্ত করতে শুরু করেছি এবং আমি পেয়েছি যে জিনিসগুলি প্রত্যাশা অনুযায়ী কাজ করে না। ওয়েবসাইটটি পিএইচপিতে নির্মিত এবং এটি একটি স্ক্রিপ্ট ব্যবহার করে স্থাপন করা হয়। মাভেনে এই জিনিসগুলি সহজে কাজ করে না, এটির কাজটি করতে আপনাকে খুব বিজোড় জিনিস তৈরি করতে হবে।
রাউল লুনা

4

মাভেন সাধারণভাবে ব্যবহৃত ওপেন সোর্স প্রকল্পগুলির একটি বৃহৎ সংগ্রহস্থল রাখে। বিল্ড চলাকালীন ম্যাভেন আপনার জন্য এই নির্ভরতাগুলি ডাউনলোড করতে পারে (পাশাপাশি আপনার নির্ভরতা নির্ভরতা :)) একটি প্রকল্প তৈরির এই অংশটিকে আরও কিছুটা পরিচালনাযোগ্য করে তুলতে।


2
+1, সেন্ট্রাল মাভেন সংগ্রহশালাটি চালু রাখতে এবং চালিয়ে যেতে কী কী দেখেছিল তা দেখে, আমাকে চিমাইতে হবে এবং পরামর্শ দিতে হবে যে মাভেন এবং আইভির মতো যে কোনও কিছু ব্যবহার করে প্রতিস্থাপন ব্যবস্থাপক ইনস্টল করার বিষয়টি বিবেচনা করা উচিত। এটি কোনটি বিবেচনা করে না তবে আমি নেক্সাস নেক্সাস.সোন্যাটাইপ.অর্গের সাথে আংশিক ।
টিম ও ব্রায়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.