মার্ভেন স্কোপ সংকলন এবং জেআর প্যাকেজিংয়ের জন্য সরবরাহের মধ্যে পার্থক্য


260

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

উত্তর:


289

থেকে ম্যাভেন ডক :

  • কম্পাইল

    এটি ডিফল্ট সুযোগ, কোনওটি নির্দিষ্ট না করা হলে ব্যবহৃত হয়। প্রকল্পের সমস্ত শ্রেণিপথগুলিতে সংকলন নির্ভরতা উপলব্ধ। তদুপরি, এই নির্ভরতা নির্ভর প্রকল্পগুলিতে প্রচারিত হয়।

  • প্রদত্ত

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

সংক্ষিপ্তবৃত্তি:

  • নির্ভরতা ট্রানজিটিভ হয় না (যেমন আপনি উল্লেখ করেছেন)
  • প্রদত্ত সুযোগটি কেবল সংকলন এবং পরীক্ষার ক্লাসপথে পাওয়া যায়, যেখানে সমস্ত শ্রেণিপথগুলিতে সংকলন সুযোগ পাওয়া যায়।
  • সরবরাহিত নির্ভরতা প্যাকেজ করা হয় না

5
হ্যা আমি জানি. তবে আমি JAR packagingপ্রসঙ্গে শর্তগুলির মধ্যে পার্থক্য সম্পর্কে চিন্তাভাবনা করি । ম্যাভেন ডক এটি সম্পর্কে উল্লেখ করে না। আমি কিছুক্ষণের জন্য ম্যাভেন ব্যবহার করি, তবে আমি ইতিমধ্যে নিজেকে এটি সম্পর্কে জিজ্ঞাসা করেছি :) সুতরাং মনে হচ্ছে JAR packagingপ্রসঙ্গে, compileএবং provided(নির্ভরতা স্থানান্তর ব্যতীত) এর মধ্যে কোনও পার্থক্য নেই। আমি কি সঠিক?
এমস্টল

3
@ জ্যাকব "কীভাবে সংকলন করার সুযোগটি সমস্ত শ্রেণিপথগুলিতে উপলব্ধ ?"
গীক

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

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

1
@ এমস্টল আপনার মূল প্রশ্নটির দিকে ফিরে, আপনি ঠিক বলেছেন যে জেআর ক্ষেত্রে নির্ভরতা জেআর এর মধ্যেই প্যাকেজ হয় না। তবে মাভেনে, জেআর প্যাকেজিংয়ের অর্থ আপনি এটি একটি লাইব্রেরি হিসাবে ব্যবহার করতে চান। আপনি অন্য কোনও মেভেন প্রকল্পে এটি আমদানির সাথে সাথেই সুযোগটি থাকলে ট্রানজিটিভ নির্ভরতা আনা হবে এবং সুযোগটি থাকলে তা compileহবে না provided
লিওলুজ

291

সংকলনের অর্থ অ্যাপটি সংকলন এবং চালনার জন্য আপনার জেআর দরকার। একটি ওয়েব অ্যাপ্লিকেশনের জন্য, উদাহরণস্বরূপ, জারটি ওয়েবে-আইএনএফ / lib ডিরেক্টরিতে স্থাপন করা হবে।

প্রদত্ত অর্থ হ'ল সংকলনের জন্য আপনার জেআর দরকার, তবে রান সময়ে পরিবেশের দ্বারা ইতিমধ্যে জার সরবরাহ করা হয়েছে যাতে আপনার অ্যাপ্লিকেশনটির সাথে এটি প্যাকেজ করা দরকার না। একটি ওয়েব অ্যাপ্লিকেশনের জন্য, এর অর্থ এই যে JAR ফাইলটি WEB-INF / lib ডিরেক্টরিতে স্থাপন করা হবে না।

একটি ওয়েব অ্যাপ্লিকেশনটির জন্য, যদি অ্যাপ্লিকেশন সার্ভারটি ইতিমধ্যে জআর (বা এর কার্যকারিতা) সরবরাহ করে, তবে "সরবরাহিত" ব্যবহার করুন অন্যথায় "সংকলন" ব্যবহার করুন।

এখানে রেফারেন্স দেওয়া আছে।


11
আপনি ওপির প্রশ্নের উত্তর দিচ্ছেন না? ' মার্ভেন স্কোপ সংকলন ব্যবহার করার ক্ষেত্রে কী পার্থক্য রয়েছে এবং যখন আর্টিফ্যাক্টটি জেআর হিসাবে নির্মিত হয় তবে সরবরাহ করা হয় ? 'লক্ষ্য করুন যে লেখক স্পষ্টভাবে বলেছেন যে যুদ্ধ হিসাবে প্যাকেজিংয়ের সময় তারা পার্থক্যটি জানে।
আলবার্তো

যদি আমি একই অ্যাপ্লিকেশন সার্ভারে মোতায়েন করা আরেকটি জেআর রেফারেন্স দিই তবে আমি কী সরবরাহ করতে পারি?
সামি ওমর

1
সুতরাং স্পষ্টতই, mvn exec:javaচালিত হওয়ার সময় সরবরাহকৃত নির্ভরতা শ্রেণিপথের সাথে যুক্ত হয় না তবে সংকলিত নির্ভরতা হয়।
জেমি

আমি এই প্রশ্নটি জিজ্ঞাসা করেছি - stackoverflow.com/questions/37360132/… সংকলনের সরবরাহ থেকে সুযোগ পরিবর্তন করে সমস্যার সমাধান করা হয়েছিল। তবে "সরবরাহিত" স্কোপ এবং "সংকলন" সুযোগের সাথে সংকলিত জারটির মধ্যে কোনও পার্থক্য দেখছি না। কেন আপনি ব্যাখ্যা করতে পারেন?
পাভেল_কে

প্রথম উত্তরটি পড়ুন: কোডরঞ্চ.com
t

22

যদি আপনি তার সমস্ত নির্ভরতা (টিপিকাল এক্সএক্সএক্সএক্সএক্স-অল.জার) সহ একক জেআর ফাইল উত্পন্ন করার পরিকল্পনা করে থাকেন, তবে সুযোগের বিষয়গুলি সরবরাহ করুন, কারণ এই ক্ষেত্রের অভ্যন্তরের শ্রেণিগুলি ফলাফলের জেআর-তে প্যাকেজ হবে না।

আরও তথ্যের জন্য মাভেন-এসেম্বলি-প্লাগইন দেখুন


7
প্রদত্ত নির্ভরতা ==> নির্ভরতা প্যাকেজ করা হবে না
গ্যাব 好人 好人

3
আপনি যখন প্যাকেজটি দিয়ে থাকেন তখন ওপি বিভ্রান্তি স্পষ্টভাবে সমাধান হয়ে যায় maven-assembly-plugin, আকর্ষণীয় যে সর্বাধিক ভোটের উত্তরগুলি উল্লেখ করে না।
হেনরিক G. Abreu

আমি এই উত্তর বুঝতে পারি না। এটি আরও একটি মন্তব্যের মতো দেখাচ্ছে।
পুনরায় পোস্টার

11
  • কম্পাইল

শ্রেণীর পথে উপলভ্য করুন, স্বাভাবিক জার হলে এই নির্ভরতাটিকে চূড়ান্ত জারে যুক্ত করবেন না; তবে চূড়ান্ত জারটি যদি একক জার হয় তবে এই বয়ামটিকে জারে যুক্ত করুন (উদাহরণস্বরূপ, এক্সিকিউটেবল জার)

  • প্রদত্ত

নির্ভরতা রান টাইম পরিবেশে উপলব্ধ হবে তাই কোনও ক্ষেত্রে এই নির্ভরতা যুক্ত করবেন না; এমনকি একক জারে নয় (যেমন সম্পাদনযোগ্য জার ইত্যাদি)


3

একটি জার ফাইলের জন্য, পার্থক্যটি MANIFEST.MF ফাইলের তালিকাভুক্ত ক্লাসপথে রয়েছে যদি অ্যাডক্লাসপথটি মাভেন-জার-প্লাগইন কনফিগারেশনে সত্য হিসাবে সেট করা থাকে। 'সংকলন' নির্ভরতা ম্যানিফেস্টে উপস্থিত হবে, 'সরবরাহিত' নির্ভরতাগুলি হবে না।

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


0

আপনি যখন খাঁটি সুযোগটি সেট করেন provided, এর অর্থ হ'ল প্লাগইন চললে প্রকৃত নির্ভরতা সংস্করণটি আপনি ইনস্টল করা অ্যাপাচি মাভেনের সংস্করণের উপর নির্ভর করবে।


0

জার ফাইল যদি এক্সিকিউটেবল স্প্রিং বুট জার ফাইলের মতো হয় তবে সমস্ত নির্ভরতার সুযোগ অবশ্যই compileসমস্ত জার ফাইল অন্তর্ভুক্ত করতে হবে।

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

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