পম এক্সএমএল-তে নির্ভরতা এবং প্লাগইন ট্যাগের মধ্যে মাভেনের পার্থক্য কী?


118

আমি মাভেন সরঞ্জামটিতে নতুন, আমি স্প্রিং এবং হাইবারনেট নিয়ে একটি প্রকল্প তৈরি করেছি এবং সেগুলি প্লাগইন হিসাবে pom.xML এ কনফিগার করা হয়েছে তবে জুনিট নির্ভরতার অধীনে ট্যাগ করা আছে। আমার প্রশ্ন হ'ল একটি প্লাগইন হিসাবে এবং একটি নির্ভরতা হিসাবে একটি পিছনে যুক্তি কি?

উত্তর:


213

প্লাগইন এবং নির্ভরতা উভয়ই জার ফাইল।

তবে তাদের মধ্যে পার্থক্যটি হ'ল, ম্যাভেনের বেশিরভাগ কাজ প্লাগিন ব্যবহার করেই করা হয়; যদিও নির্ভরতা হ'ল একটি জার ফাইল যা কাজগুলি সম্পাদন করার সময় ক্লাসপাথে যুক্ত হবে।

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

আপনার দৃশ্যের সাথে একই। কিছু বসন্ত এক্সিকিউটেবলকে কার্যকর করতে আপনাকে বসন্ত-প্লাগইন ব্যবহার করতে হবে [স্প্রিং-প্লাগইনগুলি কীসের জন্য ব্যবহৃত হয় তা আমি নিশ্চিত নই। আমি এখানে একটি অনুমান নিচ্ছি]। কিন্তু এই এক্সিকিউটেবলগুলি কার্যকর করতে আপনার নির্ভরতা দরকার। এবং জুনিটকে নির্ভরতার অধীনে ট্যাগ করা হয়েছে যেহেতু এটি ইউনিট-পরীক্ষাগুলি সম্পাদনের জন্য নিশ্চিতফায়ার-প্লাগইন ব্যবহার করে।

সুতরাং, আমরা বলতে পারি, প্লাগইন একটি জার ফাইল যা কার্য সম্পাদন করে, এবং নির্ভরতা একটি জার যা টাস্কটি কার্যকর করতে ক্লাস ফাইল সরবরাহ করে।

আশা করি এটাই তোমার প্রশ্নের উত্তর!


আমি কি কেউ আমাকে বলতে পারি মৃত্যুদন্ডের পর্বে এবং লক্ষ্যটির মধ্যে আলাদা কী ?? আমি জানতাম যে পর্বটি ম্যাভেনের জীবনচক্রের কথা বলছে .. তবে কেন আবার লক্ষ্য? কোন ইঙ্গিত? মাঝে মাঝে আমি দেখি লোকেরা লাইফ সাইকেল কীওয়ার্ডকে লক্ষ্যে নিয়ে যায় ... ??? (??)
তাইমেদী

@taymedee এই তাই প্রশ্ন পার্থক্য বর্ণনা stackoverflow.com/questions/16205778/...
dev_feed

1
@ r981 আপনার উত্তরটি আরও পরিষ্কার হওয়া দরকার। এই উত্তরটি আরও ভাল: স্ট্যাকওভারফ্লো.com
ডিজিটাল অস্থায়ীতা

আমি মনে করি এই উত্তরটির মিসড পয়েন্টটি হ'ল: শীর্ষ স্তরের নির্ভরতাগুলি প্রধানত প্লাগইনগুলির পরিবর্তে আপনার শিল্পকর্ম দ্বারা ব্যবহৃত হয়।
lfree

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

37

ম্যাভেনকে নিজেই খাদ্য প্রসেসর হিসাবে বর্ণনা করা যেতে পারে যার অনেকগুলি বিভিন্ন ইউনিট রয়েছে যা বিভিন্ন কাজ সম্পাদন করতে ব্যবহার করা যেতে পারে। সেই ইউনিটগুলিকে প্লাগইন বলা হয়। উদাহরণস্বরূপ, আপনার প্রকল্পের মাভেনের ব্যবহারগুলি সংকলন করা maven-compiler-plugin, পরীক্ষা চালানো - maven-surefire-pluginইত্যাদি।

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


দ্রুত জবাবের জন্য ধন্যবাদ, দুঃখিত তবে আমি জানি যেহেতু আমি জানি যে ইউনিতও একটি কাঠামো এবং (হাইবারনেট, স্প্রিং) কেবল কাঠামোর আওতায় আসে, তাই এর মানে হল (হাইবারনেট, বসন্ত) নির্ভরতা ট্যাগগুলিতেও কনফিগার করা যেতে পারে ? আমি আশা করি আপনি আমার প্রশ্ন পেয়েছেন।
প্রবাল

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

@ অ্যান্ড্রুলগভিনভ - এপিআই অটোমেশন পরীক্ষার জন্য আমার কাছে একটি মাল্টি পম প্রকল্প রয়েছে। মভেন প্রকল্পগুলির মধ্যে একটিতে অটোমেশন পরীক্ষা রয়েছে। প্রজেক্ট পমের বিল্ড বিভাগে মাত্র 1 টি প্লাগইন ছিল - স্যুট সম্পর্কিত রেফারেন্স সহ মেনেন শিফায়ার প্লাগইন। পুরো বিল্ড ট্যাগটি সরানো হয়েছিল। আপনি দয়া করে বলতে পারেন এর অর্থ কি? ধন্যবাদ।
মাস্টারজয়ে

15

প্লাগইন এবং নির্ভরতা খুব আলাদা জিনিস এবং এগুলি পরিপূরক।

প্লাগইন কি?

প্লাগইনগুলি ম্যাভেন বিল্ডের জন্য কার্য সম্পাদন করে। এগুলি অ্যাপ্লিকেশনটিতে প্যাকেজড নয়।

এগুলি মাভেনের হৃদয়।
মাভেন দ্বারা সম্পাদিত যে কোনও কাজ প্লাগইনগুলি দ্বারা সম্পাদিত হয়
আছে: প্লাগইনগুলির দুই ভাগে ভাগ করা যায় এবং প্লাগিন :buildreporting

  • বিল্ড প্লাগইনগুলি বিল্ড চলাকালীন কার্যকর করা হবে এবং সেগুলি <build/>POM থেকে উপাদানটিতে কনফিগার করা উচিত ।
  • রিপোর্টিং প্লাগইনগুলি সাইট জেনারেশনের সময় কার্যকর করা হবে এবং সেগুলি <reporting/POM থেকে> উপাদানটিতে কনফিগার করা উচিত ।

কমান্ড লাইনে বর্ণিত খাঁটি লক্ষ্য অনুসারে (উদাহরণস্বরূপ mvn clean, mvn clean packageবা mvn site), একটি নির্দিষ্ট জীবনকাল ব্যবহৃত হবে এবং প্লাগইন লক্ষ্যের একটি নির্দিষ্ট সেট কার্যকর করা হবে।
তিনটি বিল্ট-ইন বিল্ড lifecycles আছেন: default, cleanএবং sitedefaultজীবনচক্র আপনার প্রকল্পের স্থাপনার হ্যান্ডলগুলি, cleanজীবনচক্র হ্যান্ডলগুলি পরিচ্ছন্নতার প্রকল্প, যখন siteজীবনচক্র হ্যান্ডলগুলি আপনার প্রকল্পের এর সাইটের নথিপত্রের সৃষ্টি।

একটি প্লাগইন লক্ষ্য নির্দিষ্ট লাইফেকাইলের একটি নির্দিষ্ট পর্যায়ে আবদ্ধ হতে পারে।
উদাহরণস্বরূপ maven-compiler-pluginডিফল্টরূপে বেঁধে compileজীবনচক্র ফেজ লক্ষ্য: compile
বেশিরভাগ ম্যাভেন প্লাগইন (উভয় মূল প্লাগইন এবং তৃতীয় পক্ষের প্লাগইন) কনফিগারেশনের পক্ষে কনভেনশনকে সমর্থন করে। সুতরাং এগুলি তাদের ব্যবহারকে আরও সহজ করার জন্য একটি প্লাগইন লক্ষ্যকে একটি নির্দিষ্ট পর্যায়ে আবদ্ধ করে।

এটি পরিষ্কার ও ত্রুটিযুক্ত প্রবণ:

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.7.0</version>
</plugin>

এর চেয়ে:

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.7.0</version>
  <executions>
    <execution>
        <phase>compile</phase>
        <goals>
            <goal>compile</goal>
        </goals>
    </execution>
  </executions>
</plugin>

নির্ভরতা কি?

নির্ভরতা হ'ল মাভেন বিল্ড চলাকালীন ক্লাসপথে প্রয়োজনীয় ম্যাভেন শিল্পকর্ম / উপাদান।
এগুলি অ্যাপ্লিকেশনটিতে প্যাকেজ করা যেতে পারে তবে অগত্যা নয় ( scopeনীচে দেখুন)।

সর্বাধিক নির্ভরতা জার হয় তবে এগুলি অন্য ধরণের সংরক্ষণাগারগুলিও হতে পারে: যুদ্ধ, কান, পরীক্ষা-জার, ইজবি-ক্লায়েন্ট ... বা এখনও পম বা বিওএম।
একটি pom.xML এ, নির্ভরতা একাধিক স্থানে নির্দিষ্ট করা যেতে পারে: <build><dependencies>অংশ, dependencies managementঅংশ বা এখনও কোনও pluginঘোষণায় ! প্রকৃতপক্ষে কিছু প্লাগইনগুলি কার্যকর করার সময় শ্রেণিপথে কিছুটা নির্ভরতা থাকা দরকার। এটি সাধারণ নয় তবে এটি ঘটতে পারে।
এখানে ডকুমেন্টেশন থেকে একটি উদাহরণ যা দেখায় যে pluginএবং dependencyএকসাথে কাজ করতে পারে:

উদাহরণস্বরূপ, মাভেন আন্তরুন প্লাগইন সংস্করণ 1.2 পিপড়া সংস্করণ 1.6.5 ব্যবহার করে, আপনি যদি এই প্লাগইনটি চালনার সময় সর্বশেষ পিঁপড়া সংস্করণটি ব্যবহার করতে চান তবে আপনাকে <dependencies>নীচের মতো উপাদান যুক্ত করতে হবে :

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.2</version>
        ...
        <dependencies>
          <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant</artifactId>
            <version>1.7.1</version>
          </dependency>
          <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant-launcher</artifactId>
            <version>1.7.1</version>
          </dependency>
         </dependencies>
      </plugin>
    </plugins>
  </build>
  ...
</project>

ম্যাভেন সালে নির্ভরতা একটি নির্দিষ্ট বিন্যাসে রেফারেন্সড হয়:
groupId:artifactId:packaging:classifier:version
শ্রেণিবদ্ধ (এটি alচ্ছিক) এবং প্যাকেজিং ( JARডিফল্টরূপে) সাধারণত নির্দিষ্ট থাকে না। সুতরাং সাধারণ বিন্যাস dependencyঘোষণা বরং হল: groupId:artifactId:version
এখানে <build><dependencies>অংশে ঘোষিত নির্ভরতার উদাহরণ :

<build>
   <dependencies>
      <dependency>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate-core</artifactId>
         <version>5.2.14.Final</version>
      </dependency>
   <dependencies>
</build>

একটি প্লাগইন বিপরীতে, একটি নির্ভরতা একটি সুযোগ আছে।
ডিফল্ট সুযোগ হয় compile। এটি হ'ল সর্বাধিক প্রয়োজনীয় সুযোগ (আবার কনফিগারেশনের উপর সম্মেলন)। সুযোগ এর মানে হল যে নির্ভরতা একটি প্রকল্প সব classpaths পাওয়া যায়।
compile

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

উদাহরণস্বরূপ, আমরা পূর্বে হাইবারনেটকে compileনির্ভরতা হিসাবে সংজ্ঞায়িত করেছি কারণ আমাদের সর্বত্র এটি প্রয়োজন: উত্স সংকলন, পরীক্ষার সংকলন, রানটাইম এবং এর জন্য ....
তবে আমরা চাই না যে পরীক্ষার লাইব্রেরি অ্যাপ্লিকেশনটিতে প্যাকেজড হতে পারে বা উত্স কোডে রেফারেন্স করা যেতে পারে । সুতরাং আমরা testতাদের জন্য সুযোগ নির্দিষ্ট :

<build>
   <dependencies>
     <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.1.0</version>
        <scope>test</scope>
     </dependency>
   <dependencies>
</build>

দুর্দান্ত ব্যাখ্যা !, যেহেতু আমি জাভাতে নির্ভরতা স্থাপনের বিষয়ে পারদর্শী নই, আমার এখনও একটি সন্দেহ আছে, আমি বর্তমানে ইন্টেলিজে কাজ করছি, এবং একটি মাভেন প্রজেক্ট তৈরি করেছি, যখন আমার webdriver-ieদুটি বিকল্প আছে, আমি অন্তর্ভুক্ত করার চেষ্টা করেছি pluginsবা dependency, আমি উভয়কে তুলনা করার জন্য অন্তর্ভুক্ত করেছি এবং পর্যবেক্ষণ করেছেন উভয়ের মধ্যে ঠিক একই groupIdপার্থক্য ছিল যে pluginsকোনও নির্দিষ্ট সংস্করণ নিয়ে আসে নি তবে dependencyআসে না 0.6.685। আপনি কি এটি সাধারণ ব্যক্তির সাথে ব্যাখ্যা করতে পারেন (এই উদাহরণের সাথে সম্পর্কিত) শর্ত কী কী পার্থক্য, কখন কোনটি ব্যবহার করা উচিত। যেকোনো পরামর্শ?
আনু

1
আপনার না দেখে সবচেয়ে সঠিক উত্তর দেওয়া শক্ত pom.xml। তবে আপনার আগ্রহের বিষয়টি হ'ল যে কোনও ম্যাভেন সংস্করণে নির্ভরতা সংস্করণ নির্দিষ্ট করা আবশ্যক (বর্তমান পোমে বা প্যারেন্ট পোমে যদি এটি উত্তরাধিকারী নির্ভরতা হয়) তবে ম্যাভেন ৩ (সম্ভবত বৈশিষ্ট্য হিসাবে খারাপ ধারণা), প্লাগইন সংস্করণ নির্দিষ্ট করে .চ্ছিক। মাভেন প্রকাশের সংগ্রহস্থলে যেখানে মাভেন এটি খুঁজে পেয়েছে সেখানে উপলব্ধ সর্বশেষ সংস্করণটি ব্যবহার করবে। (1/2)
ডেভিডএক্সএক্সএক্সএক্স 17'19

1
মনে রাখবেন যে এটি একটি প্লাগইন নির্দিষ্ট করার জন্য একটি খারাপ উপায়। এটি সময়ের সাথে সাথে আপনার বিল্ডকে পুনরুত্পাদনযোগ্য করে তোলে না ( cwiki.apache.org/confluence/display/MAVEN/… )। আপনি বিল্ড একটি সতর্কতা দেখতে হবে। তাহলে পার্থক্য টা কি ?". প্লাগইনগুলি মাভেন বিল্ডের জন্য কার্য সম্পাদন করে যখন নির্ভরতা বিল্ড করার সময় শ্রেণিপথের লাইব্রেরি (জার বা যা কিছু) প্রয়োজন হয়। যদি আপনার প্রকল্পের বিল্ড একই যাই হোক না কেন যদি (লাইব্রেরি বা প্লাগইন পথ ব্যবহার করে), এটা মানে হল যে প্লাগইন অসহায় হিসেবে ব্যবহার করা (2/2)।
davidxxx

6

আপনি যদি আমার মতো ফ্রন্ট-এন্ড ব্যাকগ্রাউন্ড থেকে এসেছেন এবং গ্রান্ট এবং এনপিএমের সাথে পরিচিত হন তবে এটিকে এভাবে ভাবুন:

প্রথমে আপনি দৌড়াবেন, বলুন npm install grunt-contrib-copy --save-dev। এটি ম্যাভেনের মতো <dependency></dependency>। এটি একটি বিল্ড টাস্ক সম্পাদন করার জন্য প্রয়োজনীয় ফাইলগুলি ডাউনলোড করে।

তারপরে আপনি Gruntfile.js এ টাস্কটি কনফিগার করবেন

copy: {
  main: {
    src: 'src/*',
    dest: 'dest/',
  },
}

এটি ম্যাভেনের মতো <plugin>/<plugin>। আপনি এনপিএম / ডাউনলোডের মাধ্যমে কোডটি কী করবেন তা বিল্ড সরঞ্জামকে বলছেন <dependency></dependency>

অবশ্যই এটি কোনও সঠিক উপমা নয়, তবে এটি আপনার মাথাটি চারপাশে জড়ানোর জন্য যথেষ্ট কাছাকাছি।


4

প্লাগ-ইনগুলি Mavenনিজের মধ্যে কার্যকারিতা যুক্ত করার জন্য ব্যবহৃত হয় (যেমন eclipseসমর্থন বা SpringBootসমর্থন যোগ করা Mavenইত্যাদি)। যে কোনও ম্যাভেন ফেজ ( compileবা testউদাহরণস্বরূপ) পাস করার জন্য আপনার উত্স কোডের মাধ্যমে নির্ভরতাগুলি প্রয়োজন । ক্ষেত্রে JUnitযেহেতু পরীক্ষা কোড মূলত আপনার কোড বেস অংশ এবং আপনাকে কল JUnitপরীক্ষার স্যুটগুলির ভিতরে নির্দিষ্ট কমান্ড এবং ঐ কমান্ড দ্বারা উপলব্ধ করা হয় না Java SDKতাই JUnitসময়ে উপস্থিত থাকতে হবে Mavenপরীক্ষা পর্যায়ে হয় এবং এই উল্লেখ করে পরিচালিত হয় JUnitনির্ভরশীলতা রূপে আপনার pom.xmlফাইল


1

মাভেনের হৃদয়ে এটি একটি প্লাগইন সম্পাদন কাঠামো - আনুষ্ঠানিক এবং স্ট্যান্ডার্ড কমপ্যাক্ট সংজ্ঞা অনুযায়ী। এটিকে আরও স্পষ্ট করার জন্য, আপনি ব্যবহার করেন এমন কমান্ডগুলি maven-install/clean/compile/build etcজার তৈরি / সম্পাদন করার জন্য পছন্দ করে , যা আমরা মাঝে মধ্যে নিজে নিজে চালিত করি। সুতরাং, আপনি যে জিনিসগুলি চালাতে চান (বা কনফিগার করতে বা সম্পাদন করতে চান) আপনি মূলত সেগুলি মভেনস পমের নির্ভরতা ট্যাগে রেখেছেন এবং উত্তরটি যাতে এই নির্ভরতাগুলি (পরিবেশগত সেটআপের জন্য প্রয়োজনীয়) চালাবেন সেগুলি প্লাগইন হতে পারে।

        javac (compiler) dependency.java (dependency) 

1

এক লাইনের উত্তর - বুনিয়াদি বোঝাপড়া

প্লাগইন এমন একটি সরঞ্জাম যা আপনি আপনার মেভেন বিল্ডটি কার্যকর করার সময় ব্যবহার করেন

নির্ভরতা বলতে বোঝায় এমন কোনও লাইব্রেরি যা আপনি আপনার কোডে ব্যবহার করবেন


0

প্লাগইন হ'ল মাভেনের একটি এক্সটেনশন, আপনার শৈল্পিক উত্পাদনের জন্য ব্যবহৃত কিছু (উদাহরণস্বরূপ মাভেন-জার-প্লাগইন ব্যবহার করা হয়, আপনি এটি অনুমান করেন, আপনার সংকলিত শ্রেণি এবং সংস্থানগুলি থেকে জার তৈরি করুন)।

নির্ভরতা হ'ল একটি লাইব্রেরি যা আপনার তৈরি করা অ্যাপ্লিকেশন দ্বারা সংকলন এবং / অথবা পরীক্ষা এবং / অথবা রানটাইম সময় প্রয়োজন।

প্লাগইন এবং নির্ভরতা

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.