উত্তর:
প্লাগইন এবং নির্ভরতা উভয়ই জার ফাইল।
তবে তাদের মধ্যে পার্থক্যটি হ'ল, ম্যাভেনের বেশিরভাগ কাজ প্লাগিন ব্যবহার করেই করা হয়; যদিও নির্ভরতা হ'ল একটি জার ফাইল যা কাজগুলি সম্পাদন করার সময় ক্লাসপাথে যুক্ত হবে।
উদাহরণস্বরূপ, আপনি জাভা ফাইলগুলি সংকলন করতে একটি সংকলক-প্লাগইন ব্যবহার করেন। আপনি নির্ভরশীলতা হিসাবে সংকলক-প্লাগইন ব্যবহার করতে পারবেন না কারণ এটি কেবল ক্লাসপথে প্লাগইন যুক্ত করবে এবং কোনও সংকলন ট্রিগার করবে না। ফাইলটি সংকলনের সময় ক্লাসপাঠে যুক্ত করা জার ফাইলগুলি নির্ভরতা হিসাবে নির্দিষ্ট করা হবে।
আপনার দৃশ্যের সাথে একই। কিছু বসন্ত এক্সিকিউটেবলকে কার্যকর করতে আপনাকে বসন্ত-প্লাগইন ব্যবহার করতে হবে [স্প্রিং-প্লাগইনগুলি কীসের জন্য ব্যবহৃত হয় তা আমি নিশ্চিত নই। আমি এখানে একটি অনুমান নিচ্ছি]। কিন্তু এই এক্সিকিউটেবলগুলি কার্যকর করতে আপনার নির্ভরতা দরকার। এবং জুনিটকে নির্ভরতার অধীনে ট্যাগ করা হয়েছে যেহেতু এটি ইউনিট-পরীক্ষাগুলি সম্পাদনের জন্য নিশ্চিতফায়ার-প্লাগইন ব্যবহার করে।
সুতরাং, আমরা বলতে পারি, প্লাগইন একটি জার ফাইল যা কার্য সম্পাদন করে, এবং নির্ভরতা একটি জার যা টাস্কটি কার্যকর করতে ক্লাস ফাইল সরবরাহ করে।
আশা করি এটাই তোমার প্রশ্নের উত্তর!
ম্যাভেনকে নিজেই খাদ্য প্রসেসর হিসাবে বর্ণনা করা যেতে পারে যার অনেকগুলি বিভিন্ন ইউনিট রয়েছে যা বিভিন্ন কাজ সম্পাদন করতে ব্যবহার করা যেতে পারে। সেই ইউনিটগুলিকে প্লাগইন বলা হয়। উদাহরণস্বরূপ, আপনার প্রকল্পের মাভেনের ব্যবহারগুলি সংকলন করা maven-compiler-plugin
, পরীক্ষা চালানো - maven-surefire-plugin
ইত্যাদি।
মাভেনের ক্ষেত্রে নির্ভরতা হ'ল ক্লাসগুলির একটি প্যাকেজড টুকরা যা আপনার প্রকল্পের উপর নির্ভর করে। এটি জার, যুদ্ধ ইত্যাদি হতে পারে উদাহরণস্বরূপ, আপনি JUnit পরীক্ষা লিখতে সক্ষম হতে চাইলে আপনাকে JUnit টিকা এবং ক্লাস ব্যবহার করতে হবে সুতরাং আপনাকে ঘোষণা করতে হবে যে আপনার প্রকল্প JUnit এর উপর নির্ভরশীল।
প্লাগইন এবং নির্ভরতা খুব আলাদা জিনিস এবং এগুলি পরিপূরক।
প্লাগইনগুলি ম্যাভেন বিল্ডের জন্য কার্য সম্পাদন করে। এগুলি অ্যাপ্লিকেশনটিতে প্যাকেজড নয়।
এগুলি মাভেনের হৃদয়।
মাভেন দ্বারা সম্পাদিত যে কোনও কাজ প্লাগইনগুলি দ্বারা সম্পাদিত হয় ।
আছে: প্লাগইনগুলির দুই ভাগে ভাগ করা যায় এবং প্লাগিন :build
reporting
<build/>
POM থেকে উপাদানটিতে কনফিগার করা উচিত ।<reporting/
POM থেকে> উপাদানটিতে কনফিগার করা উচিত । কমান্ড লাইনে বর্ণিত খাঁটি লক্ষ্য অনুসারে (উদাহরণস্বরূপ mvn clean
, mvn clean package
বা mvn site
), একটি নির্দিষ্ট জীবনকাল ব্যবহৃত হবে এবং প্লাগইন লক্ষ্যের একটি নির্দিষ্ট সেট কার্যকর করা হবে।
তিনটি বিল্ট-ইন বিল্ড lifecycles আছেন: default
, clean
এবং site
। default
জীবনচক্র আপনার প্রকল্পের স্থাপনার হ্যান্ডলগুলি, 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
। আপনি কি এটি সাধারণ ব্যক্তির সাথে ব্যাখ্যা করতে পারেন (এই উদাহরণের সাথে সম্পর্কিত) শর্ত কী কী পার্থক্য, কখন কোনটি ব্যবহার করা উচিত। যেকোনো পরামর্শ?
pom.xml
। তবে আপনার আগ্রহের বিষয়টি হ'ল যে কোনও ম্যাভেন সংস্করণে নির্ভরতা সংস্করণ নির্দিষ্ট করা আবশ্যক (বর্তমান পোমে বা প্যারেন্ট পোমে যদি এটি উত্তরাধিকারী নির্ভরতা হয়) তবে ম্যাভেন ৩ (সম্ভবত বৈশিষ্ট্য হিসাবে খারাপ ধারণা), প্লাগইন সংস্করণ নির্দিষ্ট করে .চ্ছিক। মাভেন প্রকাশের সংগ্রহস্থলে যেখানে মাভেন এটি খুঁজে পেয়েছে সেখানে উপলব্ধ সর্বশেষ সংস্করণটি ব্যবহার করবে। (1/2)
আপনি যদি আমার মতো ফ্রন্ট-এন্ড ব্যাকগ্রাউন্ড থেকে এসেছেন এবং গ্রান্ট এবং এনপিএমের সাথে পরিচিত হন তবে এটিকে এভাবে ভাবুন:
প্রথমে আপনি দৌড়াবেন, বলুন npm install grunt-contrib-copy --save-dev
। এটি ম্যাভেনের মতো <dependency></dependency>
। এটি একটি বিল্ড টাস্ক সম্পাদন করার জন্য প্রয়োজনীয় ফাইলগুলি ডাউনলোড করে।
তারপরে আপনি Gruntfile.js এ টাস্কটি কনফিগার করবেন
copy: {
main: {
src: 'src/*',
dest: 'dest/',
},
}
এটি ম্যাভেনের মতো <plugin>/<plugin>
। আপনি এনপিএম / ডাউনলোডের মাধ্যমে কোডটি কী করবেন তা বিল্ড সরঞ্জামকে বলছেন <dependency></dependency>
।
অবশ্যই এটি কোনও সঠিক উপমা নয়, তবে এটি আপনার মাথাটি চারপাশে জড়ানোর জন্য যথেষ্ট কাছাকাছি।
প্লাগ-ইনগুলি Maven
নিজের মধ্যে কার্যকারিতা যুক্ত করার জন্য ব্যবহৃত হয় (যেমন eclipse
সমর্থন বা SpringBoot
সমর্থন যোগ করা Maven
ইত্যাদি)। যে কোনও ম্যাভেন ফেজ ( compile
বা test
উদাহরণস্বরূপ) পাস করার জন্য আপনার উত্স কোডের মাধ্যমে নির্ভরতাগুলি প্রয়োজন । ক্ষেত্রে JUnit
যেহেতু পরীক্ষা কোড মূলত আপনার কোড বেস অংশ এবং আপনাকে কল JUnit
পরীক্ষার স্যুটগুলির ভিতরে নির্দিষ্ট কমান্ড এবং ঐ কমান্ড দ্বারা উপলব্ধ করা হয় না Java SDK
তাই JUnit
সময়ে উপস্থিত থাকতে হবে Maven
পরীক্ষা পর্যায়ে হয় এবং এই উল্লেখ করে পরিচালিত হয় JUnit
নির্ভরশীলতা রূপে আপনার pom.xml
ফাইল
মাভেনের হৃদয়ে এটি একটি প্লাগইন সম্পাদন কাঠামো - আনুষ্ঠানিক এবং স্ট্যান্ডার্ড কমপ্যাক্ট সংজ্ঞা অনুযায়ী। এটিকে আরও স্পষ্ট করার জন্য, আপনি ব্যবহার করেন এমন কমান্ডগুলি maven-install/clean/compile/build etc
জার তৈরি / সম্পাদন করার জন্য পছন্দ করে , যা আমরা মাঝে মধ্যে নিজে নিজে চালিত করি। সুতরাং, আপনি যে জিনিসগুলি চালাতে চান (বা কনফিগার করতে বা সম্পাদন করতে চান) আপনি মূলত সেগুলি মভেনস পমের নির্ভরতা ট্যাগে রেখেছেন এবং উত্তরটি যাতে এই নির্ভরতাগুলি (পরিবেশগত সেটআপের জন্য প্রয়োজনীয়) চালাবেন সেগুলি প্লাগইন হতে পারে।
javac (compiler) dependency.java (dependency)
এক লাইনের উত্তর - বুনিয়াদি বোঝাপড়া
প্লাগইন এমন একটি সরঞ্জাম যা আপনি আপনার মেভেন বিল্ডটি কার্যকর করার সময় ব্যবহার করেন
নির্ভরতা বলতে বোঝায় এমন কোনও লাইব্রেরি যা আপনি আপনার কোডে ব্যবহার করবেন
প্লাগইন হ'ল মাভেনের একটি এক্সটেনশন, আপনার শৈল্পিক উত্পাদনের জন্য ব্যবহৃত কিছু (উদাহরণস্বরূপ মাভেন-জার-প্লাগইন ব্যবহার করা হয়, আপনি এটি অনুমান করেন, আপনার সংকলিত শ্রেণি এবং সংস্থানগুলি থেকে জার তৈরি করুন)।
নির্ভরতা হ'ল একটি লাইব্রেরি যা আপনার তৈরি করা অ্যাপ্লিকেশন দ্বারা সংকলন এবং / অথবা পরীক্ষা এবং / অথবা রানটাইম সময় প্রয়োজন।