উত্তর:
জাভাতে প্রোগ্রামিং করার সময়, আপনি আপনার উত্স ফাইলটির শীর্ষে এই জাতীয় কিছু রেখে আপনি যে ক্লাসটি লিখছেন তার জন্য অন্যান্য ক্লাসগুলি উপলভ্য করুন:
import org.javaguy.coolframework.MyClass;
বা কখনও কখনও আপনি এই বলে "বাল্ক আমদানি" স্টাফ করেন:
import org.javaguy.coolframework.*;
সুতরাং পরে আপনার প্রোগ্রামে যখন আপনি বলবেন:
MyClass mine = new MyClass();
জাভা ভার্চুয়াল মেশিনটি আপনার সংকলিত ক্লাসটি কোথায় পাবেন তা জানতে পারবেন will
আপনার মেশিনের প্রতিটি ফোল্ডারে ভিএম চেহারা পাওয়া অবৈধ হবে, সুতরাং আপনাকে ভিএমকে দেখার জন্য জায়গাগুলির একটি তালিকা সরবরাহ করতে হবে। এটি আপনার ক্লাসপথে ফোল্ডার এবং জার ফাইলগুলি রেখে is
ক্লাসপাথ কীভাবে সেট করা হয় সে সম্পর্কে কথা বলার আগে আসুন আমরা .class ফাইল, প্যাকেজ এবং .jar ফাইলগুলি সম্পর্কে কথা বলি।
প্রথমে ধরা যাক যে মাইক্লাস এমন একটি জিনিস যা আপনি আপনার প্রকল্পের অংশ হিসাবে তৈরি করেছেন এবং এটি আপনার প্রকল্পের ডিরেক্টরিতে বলা হয় output
। .Class ফাইলটি output/org/javaguy/coolframework/MyClass.class
(সেই প্যাকেজের প্রতিটি ফাইলের সাথে) থাকবে। এই ফাইলটিতে পৌঁছানোর জন্য, আপনার পাথের কেবল পুরো প্যাকেজ কাঠামো নয়, ফোল্ডারটির 'আউটপুট' থাকা দরকার কারণ আপনার আমদানি বিবৃতিটি ভিএমকে সমস্ত তথ্য সরবরাহ করে।
এখন ধরা যাক আপনি কুলফ্রেমকর্মকে একটি .jar ফাইলে বান্ডিল করেন এবং সেই কুলফ্রেমকর্ম.জারকে আপনার প্রকল্পের একটি লিবিব ডিরেক্টরিতে রেখে দিন। আপনার এখন lib/CoolFramework.jar
আপনার ক্লাসপথে প্রবেশ করা দরকার । ভিএম org/javaguy/coolframework
অংশটির জন্য জার ফাইলটির ভিতরে সন্ধান করবে এবং আপনার ক্লাসটি সন্ধান করবে।
সুতরাং, শ্রেণিপথগুলিতে রয়েছে:
আপনি কিভাবে আপনার ক্লাসপথ সেট করবেন?
সবাই যেভাবে প্রথম শিখতে পারে তা হল পরিবেশের ভেরিয়েবলগুলি with ইউনিক্স মেশিনে আপনি এমন কিছু বলতে পারেন:
export CLASSPATH=/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/
একটি উইন্ডোজ মেশিনে আপনাকে আপনার পরিবেশ সেটিংসে যেতে হবে এবং হয় ইতিমধ্যে উপস্থিত মানটি সংযোজন করতে হবে বা সংশোধন করতে হবে।
দ্বিতীয় -cp
উপায়টি জাভা শুরু করার সময় প্যারামিটারটি ব্যবহার করা যেমন :
java -cp "/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/" MyMainClass
এর একটি বৈকল্পিক তৃতীয় উপায় যা প্রায়শই একটি .sh
বা .bat
ফাইল দিয়ে করা হয় যা ক্লাসপাথ গণনা করে এবং এটি -cp
প্যারামিটারের মাধ্যমে জাভাতে প্রেরণ করে ।
উপরের সমস্তটির সাথে একটি "গোটচা" রয়েছে। বেশিরভাগ সিস্টেমে (লিনাক্স, ম্যাক ওএস, ইউনিক্স, ইত্যাদি) কোলন চরিত্র (':') হয় শ্রেণিপথ বিভাজক। উইন্ডোজমে বিভাজকটি হল সেমিকোলন (';')
তাহলে এটি করার সর্বোত্তম উপায় কী?
পরিবেশগত ভেরিয়েবলের মাধ্যমে বিশ্বব্যাপী স্টাফ সেট করা খারাপ, সাধারণত একই ধরণের কারণে বিশ্বব্যাপী ভেরিয়েবলগুলি খারাপ। আপনি ক্লাসস্প্যাথ এনভায়রনমেন্ট ভেরিয়েবল পরিবর্তন করেন যাতে একটি প্রোগ্রাম কাজ করে এবং আপনি অন্য প্রোগ্রামটি ভেঙে ফেলেন।
-সিপি হবার উপায়। আমি সাধারণত নিশ্চিত করি যে আমার ক্লাসপাথ পরিবেশের পরিবর্তনশীলটি একটি ফাঁকা স্ট্রিং যেখানে আমি বিকাশ করি, যখনই সম্ভব হয়, যাতে আমি বিশ্বব্যাপী শ্রেণিবদ্ধ সমস্যাগুলি এড়াতে পারি (বিশ্বব্যাপী ক্লাসপাথ ফাঁকা থাকা অবস্থায় কিছু সরঞ্জাম খুশি হয় না - আমি দুটি সাধারণ, মেগা হাজার সম্পর্কে জানি ডলার লাইসেন্স প্রাপ্ত জে 2 ইই এবং জাভা সার্ভারগুলিতে এই জাতীয় সমস্যা রয়েছে যার সাথে তাদের কমান্ড-লাইন সরঞ্জামগুলি রয়েছে)।
org.javaguy.coolfw
সাথে সম্পর্কিত ডিরেক্টরি কাঠামো থাকে /path/to/org/javaguy/coolfw/
, ক্লাসপথটি ধারণ করা দরকার /path/to/
। যদি আমি org.javaguy.hotfw
একই প্রকল্পে একটি নতুন প্যাকেজ যুক্ত করি , ফলাফল শ্রেণি (সাধারণত) এখানে শেষ হয় /path/to/org/javaguy/hotfw/
। এর জন্য ক্লাসপাথটি থাকা দরকার /path/to/
, যা এটি ইতিমধ্যে রয়েছে। সুতরাং নতুন প্যাকেজটি (এবং এতে থাকা ক্লাসগুলি) ক্লাসপথে নতুন সংযোজনের দরকার নেই।
এটি প্যাথ এনভায়রনমেন্ট ভেরিয়েবলের জাভার জবাব হিসাবে ভাবেন - ওএসরা PATH এ এক্সইএস অনুসন্ধান করে, জাভা ক্লাসপথে ক্লাস এবং প্যাকেজগুলির সন্ধান করে।
এই প্রসঙ্গে ক্লাসপথটি সাধারণ প্রসঙ্গে যেমনটি হয় ঠিক তেমনই: ভিএম যে কোনও জায়গায় জানে যে এটি ক্লাসগুলি লোড করার জন্য এবং সংস্থানগুলিও খুঁজে পেতে পারে (যেমন আপনার ক্ষেত্রে আউটপুট.ভিএম)।
আমি বুঝতে পারি वेगটি "নো প্যাকেজ" তে কোথাও আউটপুট.ভিএম নামের একটি ফাইল খুঁজে পাওয়ার আশা করে। এটি একটি জার, নিয়মিত ফোল্ডার, ... অ্যাপ্লিকেশনটির ক্লাসপাথের যে কোনও অবস্থানের মূল হতে পারে।
CLASSPATH সিস্টেম পরিবর্তনশীল সেট করা হচ্ছে
বর্তমান CLASSPATH ভেরিয়েবলটি প্রদর্শনের জন্য, উইন্ডোজ এবং ইউনিক্স (বোর্ন শেল) এ এই কমান্ডগুলি ব্যবহার করুন: উইন্ডোজে: C:\> set CLASSPATH
ইউনিক্সে: % echo $CLASSPATH
CLASSPATH ভেরিয়েবলের বর্তমান সামগ্রীগুলি মুছতে, এই আদেশগুলি ব্যবহার করুন: উইন্ডোজে: C:\> set CLASSPATH=
ইউনিক্সে: % unset CLASSPATH; export CLASSPATH
CLASSPATH ভেরিয়েবল সেট করতে, এই কমান্ডগুলি ব্যবহার করুন (উদাহরণস্বরূপ): উইন্ডোজ: C:\> set CLASSPATH=C:\users\george\java\classes
ইউনিক্সে: % CLASSPATH=/home/george/java/classes; export CLASSPATH
ক্লাসপাথ সিস্টেমের পরিবেশগত পরিবর্তনশীল। এই ভেরিয়েবলের সেটিংটি জাভা সংকলককে যে কোনও প্যাকেজ শ্রেণিবিন্যাসের মূল সরবরাহ করতে ব্যবহৃত হয়।
CLASSPATH একটি পরিবেশ পরিবর্তনশীল (যেমন সমস্ত প্রসেসের জন্য উপলব্ধ অপারেটিং সিস্টেমের গ্লোবাল ভেরিয়েবল) জাভা প্রোগ্রামারে ব্যবহৃত জাভা প্যাকেজগুলি সনাক্ত করার জন্য জাভা সংকলক এবং রানটাইমের জন্য প্রয়োজনীয়। (প্যাকেজপাথকে কেন ডাকবেন না?) এটি অন্য পরিবেশের পরিবর্তনশীল PATH এর মতো, যা এক্সিকিউটেবল প্রোগ্রামগুলি খুঁজতে সিএমডি শেল ব্যবহার করে by
ক্লাসস্পাট নিম্নলিখিত উপায়ে একটিতে সেট করা যেতে পারে:
CLASSPATH can be set permanently in the environment: In Windows, choose control panel ⇒ System ⇒ Advanced ⇒ Environment Variables ⇒ choose "System Variables" (for all the users) or "User Variables" (only the currently login user) ⇒ choose "Edit" (if CLASSPATH already exists) or "New" ⇒ Enter "CLASSPATH" as the variable name ⇒ Enter the required directories and JAR files (separated by semicolons) as the value (e.g., ".;c:\javaproject\classes;d:\tomcat\lib\servlet-api.jar"). Take note that you need to include the current working directory (denoted by '.') in the CLASSPATH.
To check the current setting of the CLASSPATH, issue the following command:
> SET CLASSPATH
CLASSPATH can be set temporarily for that particular CMD shell session by issuing the following command:
> SET CLASSPATH=.;c:\javaproject\classes;d:\tomcat\lib\servlet-api.jar
Instead of using the CLASSPATH environment variable, you can also use the command-line option -classpath or -cp of the javac and java commands, for example,
> java –classpath c:\javaproject\classes com.abc.project1.subproject2.MyClass3
কোনও শ্রেণীর স্থির সদস্যকে অবজেক্ট ইনস্ট্যান্স না তৈরি করে সরাসরি কল করা যেতে পারে। যেহেতু মূল পদ্ধতিটি স্থির জাভা ভার্চুয়াল মেশিন কোনও ক্লাসের কোনও উদাহরণ তৈরি না করে কল করতে পারে যার মধ্যে মূল পদ্ধতি রয়েছে, যা প্রোগ্রামের সূচনা পয়েন্ট।
লিনাক্স ব্যবহারকারীদের জন্য, এবং অন্যরা এখানে যা বলেছেন তা যোগ করতে এবং যুক্ত করতে আপনার নিম্নলিখিত বিষয়গুলি জানতে হবে:
Script CLASSPATH হ'ল যা আপনার স্ক্রিপ্টের জন্য প্রয়োজনীয় বিভিন্ন শ্রেণীর জন্য সন্ধানের জন্য একাধিক ডিরেক্টরি অনুসন্ধান করতে জাভা ব্যবহার করে (যদি না আপনি স্পষ্টভাবে এটি অন্যথায় -cp ওভাররাইড দিয়ে না বলে থাকেন)। -Cp ব্যবহারের জন্য আপনাকে সমস্ত ডিরেক্টরি ম্যানুয়ালি ট্র্যাক করে রাখা এবং প্রোগ্রামটি প্রতিবার চালানোর সময় সেই লাইনটি অনুলিপি-করা (পছন্দসই IMO নয়) প্রয়োজন।
কোলন (":") অক্ষর বিভিন্ন ডিরেক্টরি পৃথক করে। এখানে কেবল একটি $ CLASSPATH রয়েছে এবং এর এতে সমস্ত ডিরেক্টরি রয়েছে। সুতরাং, যখন আপনি চালান "ক্লাসস্প্যাথ = রফতানি করুন" .... আপনি এতে যুক্ত হওয়ার জন্য আপনি বর্তমান মান "LA CLASSPATH" অন্তর্ভুক্ত করতে চান। উদাহরণ স্বরূপ:
export CLASSPATH=.
export CLASSPATH=$CLASSPATH:/usr/share/java/mysql-connector-java-5.1.12.jar
উপরের প্রথম লাইনে আপনি ক্লাসস্প্যাট শুরু করলেন কেবল একটি সাধারণ 'বিন্দু' দিয়ে যা আপনার বর্তমান কার্যকরী ডিরেক্টরিতে যাওয়ার পথ। এটির সাহায্যে, আপনি যখনই জাভাটি চালাবেন এটি ক্লাসের জন্য বর্তমান ওয়ার্কিং ডিরেক্টরিতে (আপনি যার মধ্যে আছেন) সন্ধান করবে। উপরের দ্বিতীয় লাইনে, LA ক্লাসস্প্যাথটি আপনি পূর্বে (।) প্রবেশ করানো মানটি ধরে ফেলে এবং একটি মাইএসকিএল ডাইভারে পাথ যুক্ত করে। এখন, জাভা আপনার ক্লাসগুলির জন্য ড্রাইভার এবং সন্ধান করবে।
echo $CLASSPATH
অত্যন্ত কার্যকর, এবং এটি কী দেয় তা সমস্ত ডিরেক্টরি এবং কোষ-বিভাজন দ্বারা বিভক্ত তালিকার মতো পড়তে হবে, আপনি জাভাটি প্রয়োজনীয় ক্লাসগুলির সন্ধান করছেন।
টমক্যাট ক্লাসস্প্যাট ব্যবহার করে না। এখানে সেগুলি সম্পর্কে কী করবেন তা পড়ুন: https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html