"জাভা-সিপি" এবং "জাভা-জার" এর মধ্যে পার্থক্য?


118

জাভা অ্যাপ্লিকেশনটি চালানো
java -cp CLASSPATHএবং এর মধ্যে পার্থক্য কী java -jar JAR_FILE_PATH? জাভা অ্যাপ্লিকেশন চালানোর জন্য কি তাদের একজনের পক্ষে অন্যের চেয়ে পছন্দ বেশি? আমি বোঝাতে চাই কোনটি উপায় জেভিএম (তাদের মেশিন রিসোর্সের ব্যবহার অনুসারে) বেশি ব্যয়বহুল?

অ্যাপ্লিকেশনটি চালানোর সময় কোনটি জেভিএমকে আরও থ্রেড ছড়িয়ে দেবে?

উত্তর:


97

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

আমি কোনও সংস্করণের জন্য কোনও কার্যকারিতা সুবিধা বা অসুবিধা আশা করি না। এটি কেবল jvm কে জানিয়ে দিচ্ছে যে মূল থ্রেডের জন্য কোন শ্রেণিটি ব্যবহার করতে হবে এবং এটি গ্রন্থাগারগুলি কোথায় খুঁজে পেতে পারে।


থ্রেড কি? অ্যাপ্লিকেশনটি চালানোর চেষ্টা করার সময় তারা কী জেভিএম স্প্রেড সংখ্যার থ্রেডের ক্ষেত্রে একই?
রেজা

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

@ আন্দ্রেয়াস_ডি দয়া করে এই পোস্টটি একবার দেখুন , আমার ধারণা আমি ভুল উপায়ে -cp ব্যবহার করছি এবং আমার ভুল কীভাবে সংশোধন করব তা আমি করি না I
ফু ডিএল

60

সঙ্গে -cpযুক্তি যদি আপনার অতিরিক্ত ক্লাস বা লাইব্রেরি যে আপনার প্রোগ্রাম যখন কম্পাইল বা চালানো হচ্ছে প্রয়োজনীয় যে ক্লাসপাথ অর্থাত পথ (গুলি) প্রদান। -jarআপনি চালানোতে চান এক্সিকিউটেবল জেআর ফাইলটি নির্দিষ্ট করে দেওয়ার সাথে ।

আপনি উভয় নির্দিষ্ট করতে পারবেন না। আপনি যদি চালানোর চেষ্টা করেন java -cp folder/myexternallibrary.jar -jar myprogram.jarতবে এটি সত্যিই কাজ করবে না। সেই JAR এর জন্য শ্রেণিপথটি তার ম্যানিফেস্টে নির্দিষ্ট করা উচিত, -cpযুক্তি হিসাবে নয় ।

আপনি এখানে এবং এখানে এই সম্পর্কে আরও সন্ধান করতে পারেন ।

পিএস: -cpএবং -classpathপ্রতিশব্দ হয়।


আমার উদ্বেগ সম্পদ সম্পর্কে? তারা যে সংস্থান ব্যবহার করে তাতে কি পার্থক্য আছে?
রেজা

@Hesam আপনার মধ্যে কর্মক্ষমতা পার্থক্য সম্পর্কে জিজ্ঞাসা করা থাকেন -cpএবং -classpathতারপর, কোনও, কোন পার্থক্য নেই।
রাদু মুর্জিয়া

1
না! আমি -cp (বা-ক্লাসপাথ) এবং -জার মধ্যে পারফরম্যান্স পার্থক্য বোঝাতে চেয়েছি
রেজা

2
@ হেসাম -jarআপনি নির্ধারণযোগ্য জেআর কী চালাতে চান তা নির্দিষ্ট করে দিয়ে। সঙ্গে -cpআপনাকে তা নির্দিষ্ট অতিরিক্ত ক্লাস / লাইব্রেরি যে আপনার প্রোগ্রাম প্রয়োজন হতে পারে পাথ (গুলি)। 2 এর খুব আলাদা উদ্দেশ্য রয়েছে।
রাদু মুর্জিয়া

@ রাদুমুরজিয়া, আপনি কী বোঝাতে চাইছেন যে আমরা যখন তাদের একত্রিত করি তখন এটি সত্যই কার্যকর হয় না ? যেমনjava -jar PATH -cp PATH2
Pacerier

18

ব্যবহার করার সময় java -cpআপনাকে সম্পূর্ণরূপে যোগ্যতাসম্পন্ন প্রধান শ্রেণীর নাম সরবরাহ করতে হবে, যেমন

java -cp com.mycompany.MyMain

java -jar myjar.jarআপনার জার ফাইলটি ব্যবহার করার সময় অবশ্যই ফোল্ডারের জার ফাইলটিতে থাকা ম্যানিফেস্ট.এমএফের মাধ্যমে মূল শ্রেণীর তথ্য সরবরাহ করতে হবে META-INF:

Main-Class: com.mycompany.MyMain


দয়া করে এই পোস্টটি একবার দেখুন , আমি অনুমান করি যে আমি -cp একটি ভুল উপায়ে ব্যবহার করছি, এবং আমি কীভাবে আমার ভুল সংশোধন করব না।
ফু ডিএল

10

java -cp CLASSPATH প্রয়োজনীয় যদি আপনি ক্লাসপথে সমস্ত কোড নির্দিষ্ট করতে চান। এটি ডিবাগিং কোডের জন্য দরকারী।

জারার্ড এক্সিকিউটেবল ফর্ম্যাট: java -jar JarFileআপনি যদি একক শর্ট কমান্ড দিয়ে অ্যাপ্লিকেশন শুরু করতে চান তবে ব্যবহার করা যেতে পারে। ক্লাস-পাথ এন্ট্রি-তে স্থান পৃথক জারগুলি ব্যবহার করে আপনি আপনার MANIFEST এ অতিরিক্ত নির্ভরশীল জার ফাইলগুলি নির্দিষ্ট করতে পারেন, যেমন:

Class-Path: mysql.jar infobus.jar acme/beans.jar

পারফরম্যান্সের ক্ষেত্রে উভয়ই তুলনীয়।


দয়া করে এই পোস্টটি একবার দেখুন , আমি অনুমান করি যে আমি -cp একটি ভুল উপায়ে ব্যবহার করছি, এবং আমি কীভাবে আমার ভুল সংশোধন করব না।
ফু ডিএল

2

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

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


1

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

যদি এটি এক্সিকিউটেবল জার ফাইল হয়। Java -jar কমান্ড ব্যবহার করা হলে, jvm জার ফাইলের মধ্যে /META-INF/MANIFEST.MF ফাইল থেকে চালানোর প্রয়োজন বর্গটি সন্ধান করে।

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