একটি মডিউল হলো প্যাকেজের একটি কন্টেইনার এবং প্রতিটি মডিউলে একটি মডিউল ডেসক্রিপ্টর থাকে যাতে থাকে মডিউল নেম, মডিউল ডিপেন্ডেন্সি, অর্থাৎ অন্য মডিউলগুলোর নাম যেগুলোতে এটি ডিপেন্ড করে এবং এক্সপোর্ট করা প্যাকেজের নাম যেগুলো শুধু সেসব মডিউল ব্যবহার করতে পারে যেগুলো এই মডিউলতে ডিপেন্ড করে।
module com.tutorialspoint.app {
/** Modules upon which the module com.tutorialspoint.app depends on */
requires com.tutorialspoint.services;
/** Packages exposed by this module which can be used by other modules */
exports com.tutorialspoint.app.util;
}
জাভা ৯ মডিউল দ্বারা তিনটি আলাদা কম্পাইলেশন মোড প্রদান করা হয়: লিগেসি মোড, সিঙ্গেল মডিউল মোড, এবং মাল্টি-মডিউল মোড।
মডিউলের কম্পাইলেশন মোড:
- Legacy Mode: এটি সক্রিয় হয় যখন কম্পাইলেশন এনভায়রনমেন্ট --source, --target, এবং --release অপশন দ্বারা ডিফাইন করা থাকে ৮ বা তার কম। কম্পাইলার একই ভাবে বিহেভ করে যেমন এটি জাভা ৮-এ (অথবা পূর্বে) করত যেখানে আমরা ট্র্যাডিশনাল অপশন (classpath, ইত্যাদি) ব্যবহার করতে পারি মডিউল-রিলেটেড অপশন (--module-path) বদলে। এই মোডে, আমাদের কোড রান করে অননেমড মডিউল-এ রানটাইমে।
- Single Module Mode: এটি সক্রিয় হয় যখন কম্পাইলেশন এনভায়রনমেন্ট ৯ বা তার বেশি এবং --module-source-path অপশন ব্যবহার করা হয় না। এই মোডে, কোড স্ট্রাকচারড থাকে ট্র্যাডিশনাল প্যাকেজ হায়ারার্কিক্যাল ডিরেক্টরি ট্রি-তে। কোডে একটি module-info.java ফাইল থাকে এবং মডিউলপাথে রান করে ক্লাসপাথের বদলে। এই স্ট্রাকচারে, আমরা module-info.java ফাইলটি সরাসরি src ডিরেক্টরির অধীনে রাখতে পারি। একই ডিরেক্টরি ট্রিতে একাধিক module-info.java ফাইল থাকতে পারে না, তাই এটাকে সিঙ্গেল মডিউল মোড বলা হয়।
- Multi-Module Mode: এটি সক্রিয় হয় যখন কম্পাইলেশন এনভায়রনমেন্ট ৯ বা তার বেশি এবং --module-source-path অপশন ব্যবহার করা হয়। এই মোডে, আমরা একাধিক মডিউল একই সোর্স ডিরেক্টরির অধীনে রাখি। কম্পাইল-টাইমে, মেইন সোর্স ডিরেক্টরি স্পেসিফাই করা যেতে পারে --module-source-path অপশন দিয়ে। প্রতিটি মডিউলের সোর্স ট্রি তার নিজস্ব সাব-ডিরেক্টরিতে রাখা যায় মেইন সোর্স ডিরেক্টরির অধীনে।