মাভেন কি এনপিএমের মতো?


88

আমি যেমন এনপিএম নিয়ে কাজ করেছি যা প্যাকেজ.জসন ফাইলের নির্ভরতাগুলি অনুসন্ধান করে এটি আপনার জন্য ডাউনলোড করে। একইভাবে, আমি জাভা প্রকল্পে একটি pom.xML ফাইল দেখতে পাচ্ছি। ম্যাভেন কি এই ফাইলটিতে দেখায় এবং আমার জন্য নির্ভরতা ডাউনলোড করে। নির্ভরতা জার না দিয়ে আমি কি এই pom.xML ফাইলের প্যাকেজ.জসনের মতো পাস করতে পারি? এই সরঞ্জামগুলি কি একই রকম এবং কেবল বিভিন্ন প্ল্যাটফর্মের জন্য নির্মিত?


উত্তর:


127

একই সরঞ্জাম, বিভিন্ন ভাষা?

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

ম্যাভেন বেসিক

মাভেন তার শুদ্ধতম আকারে একটি ঘোষিত মডেল অনুসরণ করে, যেখানে pom.xml(অনুরূপ package.json) বিল্ডের বিভিন্ন বৈশিষ্ট্য সংজ্ঞায়িত করে তবে এতে কোনও স্ক্রিপ্ট নেই। অসুবিধাটি হ'ল স্ক্রিপ্টগুলি ব্যবহার না করেই বিল্ডের কিছু দিকগুলি সূক্ষ্ম-টিউন করা একটি চ্যালেঞ্জ হতে পারে কারণ আপনাকে প্লাগিনগুলির উপর নির্ভর করতে হবে। সুবিধাটি হ'ল কেবলমাত্র দেখে অন্য বিল্ডগুলি বোঝা আরও সহজ হতে পারে pom.xmlকারণ তারা সাধারণত খুব বেশি স্বনির্ধারণ না করে একই পন্থা অনুসরণ করে। গ্রেডল একটি জনপ্রিয় গ্রোভি ভিত্তিক সরঞ্জাম যা মাভেন স্ট্যান্ডার্ড এবং কনভেনশনগুলির শীর্ষে নির্মিত এবং বিশেষত pom.xmlএই "কোনও স্ক্রিপ্ট নয়" বাধা সরল করার জন্য এবং ডিজাইন করা হয়েছে ।

আপনার নির্ভরতা উল্লেখ করা

একইভাবে package.json, আপনি pom.xmlসরাসরি আপনার নির্ভরতা নিয়ে কাজ করবেন না , বরং নির্ভরতা স্থানাঙ্কগুলি সংজ্ঞায়িত করুন এবং আপনার বিল্ড সরঞ্জামটিকে বাকিগুলি পরিচালনা করতে দিন। মাভেনে এই সমন্বয়গুলির মূল ফর্মটি হ'ল জিএভি (গ্রুপআইডি, আর্টিফ্যাক্টআইডি, সংস্করণ)।

ফ্ল্যাট নির্ভরতা গাছ?

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

দ্রষ্টব্য: এনএমপি ভি 3 সাল থেকে নির্ভরতা সমতল হয়। বিকল্প প্যাকেজ ম্যানেজার সুতাও একই কাজ করে।

পরিপক্কতা

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


4
উপরের তথ্যের পাশাপাশি, নিম্নলিখিত ইউটিউব প্লেলিস্ট একটি প্যাকেজ ম্যানেজার হিসাবে মাভেনের ব্যবহার বর্ণনা করার জন্য দুর্দান্ত কাজ করে
টমি থম্পসন

4
আমি প্রায়শই npmjs.com পরিদর্শন করি এমন প্যাকেজটি অনুসন্ধান করতে যা সহায়ক হতে পারে। মাভেনের ( সার্চ.ম্যাভেন.আর.আরগ ) এই কাজটি করার জন্য একটি লিঙ্ক খুঁজে পেতে বেশ খানিকটা গুগল লাগছিল । তবে অনুসন্ধানগুলি আমাকে ডক্সের দিকে নির্দেশ করে না, আমাকে জনপ্রিয়তার মেট্রিকগুলি দেখায় না, গিথুবকে নির্দেশ করবে না point আমি এটি সহায়ক মনে করি না, এটি পরামর্শ দিয়েছিলেন যে এটি এমন কিছু যা লোকেরা এনপিএমের প্রত্যাশা করে তবে মাভেনের নয়।
জো ল্যাপ

এনপিএম এবং মাভেনের মধ্যে বেশ ভাল স্ট্যাটিস্টিকাল তুলনাটি এখানে: stackshare.io/stackups/npm-vs-gradle
cacoder

4
এই উত্তরের একটি আপডেট: "তদ্ব্যতীত, মাভেন এনপিএমের তুলনায় যথেষ্ট পুরানো, এর বৃহত্তর ব্যবহারকারী বেস রয়েছে ..." এই প্রশ্নটি সম্ভবত 2017 সালে উত্তর হয়েছিল, তবে সম্ভবত এটি সঠিক ছিল না। @ ক্যাকোডার পোস্ট করা লিঙ্ক অনুসারে, এনপিএম-র ব্যবহারকারীর ভিত্তি এখন মাভেনের তুলনায় প্রায় 11x বড়। সূত্র: stackshare.io/stackups/gradle-vs-maven-vs-npm
mnutsch

31

নীচে আমি |maven এর মধ্যে পৃথক করতে ব্যবহার করি যথাক্রমে এনপিএম পদ:

সাধারণ বৈশিষ্ট্য:

  • উভয় টুলস সমর্থন গতিশীল নির্ভরতা আনা ( নিদর্শন | প্যাকেজ ) একটি বর্ণনাকারী ফাইল উপর ভিত্তি করে pom.xml| package.json, এবং আপনাকে মোতায়েন করার অনুমতি দেয় আপনার নিজস্ব নিদর্শন প্রকাশ করুন প্যাকেজ

  • তাদের উভয়েরই একটি ডিফল্ট পাবলিক ভান্ডার রয়েছে রেজিস্ট্রি ( http://repo.maven.apache.org/maven2/ | https://registry.npmjs.org ) তবে তৃতীয় পক্ষটিও (মাধ্যমে settings.xml|.npmrc ) ব্যবহার করা যেতে পারে ।

  • তারা উভয়ই বিল্ড-লেভেল নির্ভরতা (স্ক্রিপ্টগুলিতে ব্যবহৃত প্লাগইনস | ডেভডিপেন্ডেন্সি) ধারণাটি সমর্থন করে । * মাভেন providedনির্ভরতাও সমর্থন করে তবে এটি এনপিএমের ক্ষেত্রে প্রযোজ্য বলে মনে হয় না, কারণ জাভাস্ক্রিপ্টটি পাত্রে খুব কমই স্থাপন করা হয়।

  • তারা উভয় নির্ভরতা নেমস্পেসিং সমর্থন করে: groupId|scope

পার্থক্য:

  • মেভেনের একটি অতিরিক্ত স্থানীয় সংগ্রহস্থল (ক্যাশে) রয়েছে:

    • ডিফারেন্ট প্রকল্পগুলির জন্য আবার একই নির্ভরতা আনতে হবে না।
    • স্থানীয়ভাবে ইনস্টল করা শিল্পকর্মগুলি অন্যান্য স্থানীয় প্রকল্পগুলি দ্বারা স্বয়ংক্রিয়ভাবে অ্যাক্সেসযোগ্য।
  • মাভেনে একটি প্রকল্প বিল্ড থেকে নির্ভরতা ডাউনলোড করা হয় <homedir>/.m2। এনপিএম সহ তারা ডাউনলোড হয় <projectdir>/node_modules

  • মাভেনে বিল্ডিং সাধারণত একটি এক-পদক্ষেপ প্রক্রিয়া : mvn package(আনুন ডিপস, বিল্ড)। এনপিএম এ এটি একটি ২-পদক্ষেপ প্রক্রিয়া: npm install(আনুন ডিপগুলি), npm build(বিল্ড)

  • ম্যাভেন সংজ্ঞায়িত বিল্ড lifecycles (বিল্ডিং, টেস্টিং, মোতায়েন জন্য) , পর্যায়ক্রমে গঠিত যা ডিফল্ট কার্যকলাপ (প্লাগ ইন গোল) সংযুক্ত , differrent বিকল্প প্যাকেজিং (উপর ভিত্তি করে .jar, .war, .earইত্যাদি)। তারপরে আপনি এই ক্রিয়াকলাপগুলিকে ওভাররাইট করতে বা নতুন প্লাগ ইন করতে পারেন (প্লাগইন সিস্টেমের মাধ্যমে)। এটি বিল্ড, ডকজেন, পরীক্ষা, মোতায়েন ইত্যাদির জন্য বাইরের একটি বাক্সের সমাধান সরবরাহ করে
    এনপিএম পদ্ধতির আরও সরল (দেখুন: স্ক্রিপ্টগুলি )

  • উপরের কারণে, এনএমপি জাভাস্ক্রিপ্টের জন্য প্যাকেজ-পরিচালন সরঞ্জাম হিসাবে লেবেল করা হয়েছে এবং ম্যাভেনকে জাভাটির জন্য বিল্ড-অটোমেশন এবং নির্ভরতা-পরিচালন সরঞ্জাম হিসাবে লেবেল করা হয়েছে ।

  • মেভেন সেটিং-এ বিল্ড প্রক্রিয়াটি সাধারণত সম্পাদনা করেpom.xml
    Npm এটা জড়িত লেখা কোড বা কনফিগার পরিপূরক বিল্ড সরঞ্জাম মত gulp, webpackইত্যাদি

  • কোনও কারণে এনপিএম মডিউলগুলিতে ব্যবহারকারীদের দ্বারা সংজ্ঞায়িত সংস্করণ সীমাগুলি মাভেনের তুলনায় অনেক বেশি loose িলে। এটি ট্রানজিটিভ নির্ভরতা নিয়ে সমস্যা সৃষ্টি করতে পারে, এজন্য সম্প্রতি একটি অতিরিক্ত ফাইল যুক্ত করা হয়েছিল:package-lock.json

  • Npm সঙ্গে এটি অনেক বেশী সহজবোধ্য শুরু করার জন্য একটি নতুন প্রকল্প: npm init। মাভেনের সাহায্যে আপনাকে কীভাবে ন্যূনতম লিখতে হবে pom.xml, বা প্রত্নতাত্ত্বিক সম্পর্কে পড়তে হবে তা জানতে হবে।

  • সাধারণভাবে এটি সম্পাদনার pom.xmlচেয়ে অনেক বেশি সাধারণ package.json। যেমন ম্যাভেনের মধ্যে নির্ভরতা যুক্ত করা কমান্ড লাইনের মাধ্যমে এনপিএমের সময় ম্যানুয়ালি (বা আইডিই এর মাধ্যমে) সম্পন্ন হয়

  • সমস্ত বিল্ড সরঞ্জামগুলির মতো, আপনি অন্য একটি অভ্যন্তর থেকে একটি সরঞ্জাম কল করতে পারেন, তবে আমি মনে করি এর বিপরীত দিকের চেয়ে মাভেন থেকে এনপিএম কল করা আরও সাধারণ ।

  • এনপিএম দেবকে সমর্থন করে , উত্পাদন বাড়ায় । Maven এ এটি প্রোফাইলের মাধ্যমে সংজ্ঞায়িত করা দরকার


5

হ্যাঁ. এটি জাভা জন্য একটি অনুরূপ প্যাকেজিং সরঞ্জাম। gradleযা আপনাকে আরও স্বাধীনতা দেয় সেটির জন্যও সন্ধান করুন groovy languageতবে শুরুতে আপনি mavenনিজের নির্ভরতাগুলি সংগঠিত করতে ব্যবহার করতে পারেন । আপনি সেগুলিকে সেখানে ট্যাগ হিসাবে অন্তর্ভুক্ত করেন এবং খাঁটি আপনার পক্ষে কাজ করে।

এটি নির্ভরতা গাছকে অনুসরণ করে এবং সমস্ত উপযুক্ত জারগুলি ডাউনলোড করে।


4
নিশ্চিত নয় কারণ আমি এই সমস্ত জেএস সরঞ্জামগুলির সাথে এতটা পরিচিত নই। gradleহয় maven + antএকসঙ্গে এর কথা বলা যাক। এটি ম্যাভেন যা করে তা করে কিন্তু এটি আপনাকে যে সমস্ত ডি-ফ্যাক্টো কাজ করে তা ছাড়াই কোড এবং স্ক্রিপ্টগুলি লেখার স্বাধীনতা দেয়। আমি gulpএখনই এক নজর ছিল । আমি যা পড়েছি তা হতে পারে এটি একই। আপনি যদি ম্যাভেন বনাম গ্রেডেল ব্যবহার শুরু করতে চান তবে আমি আপনাকে mavenআরও স্পষ্ট এবং বুঝতে সহজ এবং এর সাথে জগাখিচির সাথে শুরু করার পরামর্শ দিচ্ছি gradle!
অ্যাপস্টোলোস

ধন্যবাদ মাভেনের কি সমতল নির্ভরতা গাছ বা নেস্টেড নির্ভরতা গাছ থাকে?
শুভম জৈন

4
উদাহরণস্বরূপ এখানে mvnrepository.com/artifact/org.hibernate/hibernate-core/… দেখুন । হাইবারনেট অন্যান্য অন্যান্য গ্রন্থাগারের উপর নির্ভর করে, তবে এই জারগুলি হাইবারনেট লাইব্রেরির ভিতরে নয় তবে তাদের নিজস্ব প্যাকেজগুলিতে স্থানীয় মাভেন রেপোতে সংরক্ষণ করা হবে।
Apostolos

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

4
দুঃখিত, আপনি সঠিক। এটিকে প্রোফাইল বিল্ডিং পদ্ধতিতে বিভ্রান্ত করেছিলাম যা আমি মাঝে মাঝে সংস্করণগুলি ব্যবহার করি এবং সংজ্ঞা করি।
অ্যাপস্টোলোস

0

হ্যাঁ, গ্রেডেল একই, তবে তারা এনপিএম হিসাবে ব্যবহারকারী বান্ধব নয়।

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