Maven Multi-module Projects হল একটি পদ্ধতি যেখানে একাধিক মডিউল বা সাব-প্রজেক্ট একই মূল প্রজেক্টে একত্রিত করা হয়। এটি ডিপেনডেন্সি ম্যানেজমেন্ট এবং প্রজেক্ট বিল্ডিংকে সহজ করে তোলে, বিশেষত যখন একটি বড় সিস্টেমের জন্য একাধিক ছোট প্রজেক্ট বা মডিউল থাকে। এই প্রক্রিয়া ব্যবহারের মাধ্যমে আপনি বিভিন্ন মডিউলের মধ্যে পুনরায় ব্যবহারযোগ্য কোড শেয়ার করতে পারেন এবং মডিউলগুলির মধ্যে সহজে সম্পর্ক তৈরি করতে পারেন।
১. Maven Multi-module Project এর সুবিধা
- Centralized Build: সমস্ত মডিউল একত্রিত করে একটি কেন্দ্রীয় বিল্ড প্রক্রিয়া পরিচালনা করা সম্ভব হয়।
- Dependency Management: একাধিক মডিউলের মধ্যে ডিপেনডেন্সি সহজভাবে ম্যানেজ করা যায়।
- Modularity: প্রজেক্টের মধ্যে বিভিন্ন অংশ ভাগ করে নিয়ে একাধিক মডিউল তৈরি করা যায়।
- Code Reusability: মডিউলগুলির মধ্যে কোডের পুনরাবৃত্তি কমানো সম্ভব হয়।
২. Maven Multi-module Project কনফিগারেশন
Maven Multi-module Project তৈরি করতে, মূল প্রজেক্টের একটি parent পম (POM) ফাইল তৈরি করতে হয়, যা সমস্ত সাব-মডিউলগুলির জন্য কনফিগারেশন এবং ডিপেনডেন্সি নির্ধারণ করবে। প্রতিটি সাব-প্রজেক্টের জন্য একটি child POM তৈরি করা হয়।
২.১ Parent POM তৈরি করা
প্রথমে, একটি parent POM তৈরি করুন, যা সমস্ত মডিউল এবং তাদের ডিপেনডেন্সি সংজ্ঞায়িত করবে। এটি pom.xml ফাইলে <modules> ট্যাগ ব্যবহার করে সমস্ত সাব-মডিউলগুলো অন্তর্ভুক্ত করবে।
parent-pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>module1</module>
<module>module2</module>
</modules>
<dependencyManagement>
<dependencies>
<!-- Define common dependencies -->
</dependencies>
</dependencyManagement>
</project>
এখানে parent-project হলো মূল প্যারেন্ট প্রজেক্ট এবং এটি দুটি সাব-প্রজেক্ট (module1 এবং module2) ইনক্লুড করেছে। packaging এখানে pom হিসেবে সেট করা হয়েছে কারণ এটি একটি প্যারেন্ট পম।
২.২ Child Module POM Configuration
প্রতিটি মডিউলের জন্য একটি সাব-প্রজেক্ট pom.xml ফাইল থাকবে যা প্যারেন্ট পম থেকে ডিপেনডেন্সি, প্লাগইন এবং অন্যান্য কনফিগারেশন উত্তরাধিকারী হবে।
module1/pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>module1</artifactId>
<dependencies>
<!-- Module-specific dependencies -->
</dependencies>
</project>
module2/pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>module2</artifactId>
<dependencies>
<!-- Module-specific dependencies -->
</dependencies>
</project>
এখানে, module1 এবং module2 দুটি সাব-প্রজেক্ট প্যারেন্ট পম ফাইল থেকে কনফিগারেশন গ্রহণ করছে। relativePath নির্দেশ করে যে, এটি প্যারেন্ট পম ফাইলের অবস্থান কীভাবে খুঁজে পাবে।
৩. Maven Multi-module Project Build এবং Run
Multi-module Project বিল্ড করার জন্য আপনাকে প্যারেন্ট পম ফাইলের ডিরেক্টরিতে গিয়ে mvn clean install বা mvn clean package কমান্ড চালাতে হবে। এটি সমস্ত সাব-প্রজেক্ট (মডিউল) বিল্ড করবে এবং ডিপেনডেন্সি সংক্রান্ত সমস্যা সমাধান করবে।
বিল্ড কমান্ড:
mvn clean install
এই কমান্ডটি প্যারেন্ট প্রজেক্টের সব মডিউলগুলির জন্য বিল্ড প্রক্রিয়া শুরু করবে এবং সমস্ত মডিউল ডিপেনডেন্সি ইনস্টল করবে। আপনি যদি শুধু একটি নির্দিষ্ট মডিউল বিল্ড করতে চান তবে -pl অপশন ব্যবহার করতে পারেন:
mvn clean install -pl module1
এটি শুধুমাত্র module1 মডিউলটি বিল্ড করবে।
প্যাকেজিং কমান্ড:
mvn clean package
এটি সমস্ত মডিউলগুলির জন্য JAR বা WAR প্যাকেজ তৈরি করবে, যার মধ্যে প্রজেক্টের সোর্স কোড ও ডিপেনডেন্সি অন্তর্ভুক্ত থাকবে।
৪. Maven Multi-module Projects এ Dependency Management
আপনি একটি মডিউলে অন্য মডিউলের ডিপেনডেন্সি অন্তর্ভুক্ত করতে পারেন। সাধারণত, parent pom এ dependencyManagement সেকশন ব্যবহার করে আপনি সমস্ত সাব-প্রজেক্টে একই ডিপেনডেন্সি ম্যানেজমেন্ট কনফিগারেশন দিতে পারেন।
Example: Dependency Management in Parent POM
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
</dependencies>
</dependencyManagement>
এটি সমস্ত সাব-প্রজেক্টে commons-lang3 ডিপেনডেন্সির ভার্সন নির্ধারণ করে।
৫. Maven Multi-module Project এর সুবিধা
- Centralized Build Configuration: সমস্ত মডিউল একত্রে একটি কেন্দ্রীয় বিল্ড কনফিগারেশন দ্বারা পরিচালিত হয়।
- Dependency Management: একাধিক মডিউলের মধ্যে ডিপেনডেন্সি খুব সহজে এবং সুনির্দিষ্টভাবে ম্যানেজ করা যায়।
- Code Reusability: একাধিক মডিউল থেকে কোড পুনঃব্যবহার করা যায়, যেমন কমন লাইব্রেরি বা ফিচারগুলির জন্য।
- Maintainability: প্রজেক্টের বড় আর্কিটেকচার আরও সুসংগঠিত এবং রক্ষণাবেক্ষণযোগ্য হয়।
সারাংশ
Maven Multi-module Projects হল একটি কার্যকরী পদ্ধতি যা বড় প্রজেক্টে একাধিক ছোট মডিউলকে একত্রিত করতে সহায়তা করে। এর মাধ্যমে আপনি একাধিক মডিউলগুলির মধ্যে কোড শেয়ার করতে পারেন এবং ডিপেনডেন্সি ও বিল্ড কনফিগারেশনকে কেন্দ্রীভূতভাবে পরিচালনা করতে পারেন। Parent POM এবং Child POM ফাইলের মাধ্যমে Maven Multi-module প্রজেক্ট তৈরি, বিল্ড এবং ডিপেনডেন্সি ম্যানেজমেন্ট সহজ করা সম্ভব।
Maven হল একটি বিল্ড টুল যা Java প্রোজেক্টের ডিপেনডেন্সি ম্যানেজমেন্ট এবং বিল্ড অটোমেশন সরবরাহ করে। Multi-module projects Maven এর একটি শক্তিশালী বৈশিষ্ট্য, যা একাধিক সাব-প্রোজেক্ট বা মডিউল নিয়ে একটি বড় প্রোজেক্ট তৈরি করতে সাহায্য করে। এটি বিশেষভাবে উপকারী যখন আপনি একটি প্রোজেক্টের মধ্যে একাধিক কাজ বা ফিচার ডেভেলপ করছেন এবং এগুলির মধ্যে পুনঃব্যবহারযোগ্য কোড এবং ডিপেনডেন্সি শেয়ার করতে চান।
১. Maven Multi-module প্রোজেক্ট কি?
Maven Multi-module Project হল এমন একটি প্রোজেক্ট যা একাধিক সাব-প্রোজেক্ট বা মডিউল নিয়ে তৈরি। এখানে একটি প্যারেন্ট (parent) প্রোজেক্ট থাকে এবং তার মধ্যে এক বা একাধিক মডিউল থাকে। প্রতিটি মডিউল একটি আলাদা অ্যাপ্লিকেশন বা লাইব্রেরি হতে পারে, এবং এগুলির মধ্যে ডিপেনডেন্সি এবং ফিচার শেয়ার করা হয়।
২. Maven Multi-module Project এর উপকারিতা
- Reusability: একাধিক মডিউলের মধ্যে কোড পুনঃব্যবহার সম্ভব হয়। একটি মডিউল তৈরি করলে, অন্য মডিউলে সহজেই ব্যবহার করা যায়।
- Centralized Dependency Management: প্যারেন্ট প্রোজেক্টের মধ্যে ডিপেনডেন্সি ম্যানেজমেন্ট কেন্দ্রীভূত করা যায়, যা সকল মডিউলের জন্য একযোগভাবে কাজ করে।
- Modularization: বড় এবং জটিল প্রোজেক্টগুলো মডিউল আকারে বিভক্ত করা যায়, যা পরিচালনাকে সহজ করে তোলে।
- Build Management: সব মডিউল একসাথে বিল্ড করা যায়, তবে প্রতিটি মডিউল আলাদাভাবে বিল্ডও করা সম্ভব।
৩. Maven Multi-module Project এর কাঠামো
একটি multi-module project সাধারণত একটি প্যারেন্ট প্রোজেক্টের অধীনে একাধিক মডিউল থাকে। নিচে একটি সাধারণ multi-module project এর কাঠামো দেখানো হল:
parent-project/
│
├── pom.xml (Parent POM)
│
├── module-a/
│ └── pom.xml
│
├── module-b/
│ └── pom.xml
│
└── module-c/
└── pom.xml
- Parent Project (pom.xml): এটি মূল প্রকল্প এবং এটি সব মডিউলের জন্য সাধারণ কনফিগারেশন ধারণ করে।
- Module A, B, C: প্রতিটি মডিউল একটি নির্দিষ্ট কাজ বা ফিচার নিয়ে কাজ করে এবং আলাদা পম ফাইল থাকে।
৪. Maven Multi-module Project কিভাবে কাজ করে?
Maven Multi-module প্রোজেক্টে একাধিক মডিউল থাকে, এবং প্রতিটি মডিউল প্যারেন্ট প্রোজেক্টের পম ফাইল দ্বারা পরিচালিত হয়। প্যারেন্ট প্রোজেক্টের pom.xml ফাইলে modules ট্যাগের মাধ্যমে সব মডিউল উল্লেখ করা হয়।
উদাহরণ: Parent POM (pom.xml)
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>module-a</module>
<module>module-b</module>
<module>module-c</module>
</modules>
<dependencyManagement>
<dependencies>
<!-- Shared dependencies for all modules -->
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<!-- Shared build plugins for all modules -->
</plugins>
</pluginManagement>
</build>
</project>
এখানে, modules ট্যাগের মাধ্যমে module-a, module-b, এবং module-c মডিউলগুলো উল্লেখ করা হয়েছে। এছাড়া dependencyManagement এবং pluginManagement এর মাধ্যমে সমস্ত মডিউলের জন্য সাধারণ ডিপেনডেন্সি এবং প্লাগইন কনফিগারেশন প্রদান করা হয়।
উদাহরণ: Module POM (pom.xml for module-a)
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <!-- Parent POM Location -->
</parent>
<artifactId>module-a</artifactId>
<dependencies>
<!-- Module-specific dependencies -->
</dependencies>
</project>
এখানে, module-a তার প্যারেন্ট পম ফাইলটি ইঙ্গিত করছে, এবং নিজস্ব artifactId এবং প্রয়োজনীয় dependencies উল্লেখ করেছে।
৫. Maven Multi-module Build Process
Maven multi-module প্রোজেক্টে একাধিক মডিউল থাকা সত্ত্বেও, আপনি একটি single command দিয়ে সমস্ত মডিউল বিল্ড করতে পারেন। এটি Maven reactor ব্যবহারের মাধ্যমে হয়। Reactor মডিউলগুলিকে নির্ধারিত অর্ডারে বিল্ড করতে সক্ষম।
উদাহরণ: বিল্ড কমান্ড
mvn clean install
এই কমান্ডটি parent-project এর পম ফাইল থেকে সমস্ত মডিউল সনাক্ত করবে এবং প্রতিটি মডিউল একে একে বিল্ড করবে।
৬. Maven Multi-module Project এর সুবিধা
- Centralized Configuration: প্যারেন্ট পম ফাইলে সমস্ত মডিউলের জন্য সাধারণ কনফিগারেশন এবং ডিপেনডেন্সি একত্রিত রাখা হয়।
- Modularization: বড় প্রোজেক্টকে ছোট ছোট মডিউলে ভাগ করা যায়, যা প্রকল্পের ডেভেলপমেন্ট এবং মেইনটেন্যান্স সহজ করে।
- Dependency Management: মডিউলের ডিপেনডেন্সি প্যারেন্ট পম ফাইলে কনফিগার করা হয়, যা ডেভেলপমেন্টকে সহজ এবং কেন্দ্রীভূত করে তোলে।
- Build Efficiency: একক কমান্ডের মাধ্যমে সমস্ত মডিউল বিল্ড করা যায়, ফলে ডেভেলপমেন্ট সাইকেল দ্রুত হয়।
সারাংশ
Maven Multi-module Project হল একাধিক মডিউল নিয়ে একটি বড় প্রোজেক্ট তৈরি করার প্রক্রিয়া, যেখানে প্রতিটি মডিউল প্যারেন্ট প্রোজেক্টের অধীনে থাকে এবং মডিউলগুলির মধ্যে ডিপেনডেন্সি ও কনফিগারেশন শেয়ার করা হয়। এতে কোড পুনঃব্যবহারযোগ্যতা, কেন্দ্রীভূত কনফিগারেশন এবং একক বিল্ড প্রক্রিয়ার সুবিধা পাওয়া যায়। Maven Reactor ব্যবহার করে আপনি সমস্ত মডিউল একসাথে বিল্ড করতে পারেন, যা বড় প্রোজেক্টে উন্নত ব্যবস্থাপনা এবং দক্ষতা নিয়ে আসে।
Maven একটি শক্তিশালী প্রোজেক্ট বিল্ডিং এবং ম্যানেজমেন্ট টুল যা POM (Project Object Model) ফাইল ব্যবহার করে প্রোজেক্টের কনফিগারেশন, ডিপেনডেন্সি এবং বিল্ড পরিচালনা করে। Parent POM এবং Child POM হল Maven এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা multi-module projects পরিচালনা করার জন্য ব্যবহৃত হয়। এই পদ্ধতিটি POM inheritance বা aggregation এর মাধ্যমে প্রোজেক্টের কনফিগারেশন ভাগ করে এবং ডিপেনডেন্সি, প্লাগইন এবং অন্যান্য কনফিগারেশন ভাগ করে দেয়।
Parent POM এবং Child POM কি?
- Parent POM:
- Parent POM হলো একটি মূল (root) POM ফাইল যা বিভিন্ন Child POM গুলোর জন্য সাধারণ কনফিগারেশন সরবরাহ করে। এটি মডুলারের জন্য নির্দিষ্ট কনফিগারেশন সেট এবং ডিপেনডেন্সি ফাইলগুলির জন্য একটি মডেল হিসেবে কাজ করে।
- এটি প্রকল্পের সাধারণ সেটিংস, ডিপেনডেন্সি, প্লাগইন এবং বিল্ড কনফিগারেশন নির্ধারণ করে, যা সমস্ত Child POM দ্বারা উত্তরাধিকারসূত্রে গ্রহণ করা হয়।
- Child POM:
- Child POM হলো একটি Maven প্রোজেক্টের পোম ফাইল যা Parent POM থেকে কনফিগারেশন এবং ডিপেনডেন্সি উত্তরাধিকারসূত্রে গ্রহণ করে। তবে, Child POM তার নিজস্ব নির্দিষ্ট কনফিগারেশনও ধারণ করতে পারে যা Parent POM থেকে আলাদা।
- Child POM মূলত একটি সাব-মডিউল হিসেবে কাজ করে, যেখানে আপনি নির্দিষ্ট সেটিংস এবং ডিপেনডেন্সি যুক্ত করতে পারেন, যা Parent POM থেকে পাওয়া কনফিগারেশনের উপর ভিত্তি করে কাজ করবে।
Parent এবং Child POM এর সুবিধা
- কনফিগারেশন পুনঃব্যবহারযোগ্যতা:
- Parent POM কনফিগারেশন এবং ডিপেনডেন্সি সমন্বয়ের জন্য একটি সাধারণ কেন্দ্রীয় ফাইল সরবরাহ করে। এর ফলে Child POM গুলোতে বারবার একই কনফিগারেশন পুনরায় লিখতে হয় না।
- আপনি Parent POM এ ডিপেনডেন্সি, প্লাগইন এবং বিল্ড কনফিগারেশন লিখে রেখে Child POM গুলোতে সেটি উত্তরাধিকার সূত্রে গ্রহণ করতে পারেন।
- মাল্টি-মডিউল প্রোজেক্ট ম্যানেজমেন্ট:
- Parent এবং Child POM গুলির ব্যবহার মাল্টি-মডিউল Maven প্রোজেক্ট পরিচালনা করতে সহায়ক হয়। একাধিক সাব-মডিউল বা প্রোজেক্টকে একই প্যারেন্ট পোমের অধীনে পরিচালনা করা যায়, যা সামগ্রিক প্রোজেক্টে একক কনফিগারেশন মডেল প্রয়োগ করে।
- এটি প্রোজেক্টে ডিপেনডেন্সি সংস্করণের সাথে সম্পর্কিত সমস্যা দূর করতে সাহায্য করে।
- কেন্দ্রীয় কনফিগারেশন ম্যানেজমেন্ট:
- প্যারেন্ট POM এর মাধ্যমে আপনি সমস্ত সাব-মডিউল/চাইল্ড প্রোজেক্টের জন্য কেন্দ্রীয় কনফিগারেশন ম্যানেজ করতে পারেন। এর ফলে প্রোজেক্টের কনফিগারেশনগুলি কেন্দ্রীয়ভাবে পরিচালনা এবং সংস্করণ করা সহজ হয়।
Parent POM এবং Child POM কিভাবে কাজ করে?
- Parent POM তৈরি করা: প্রথমে একটি Parent POM ফাইল তৈরি করতে হবে, যেখানে আপনার সমস্ত কমন কনফিগারেশন এবং ডিপেনডেন্সি থাকবে।
Parent POM উদাহরণ:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>child-module1</module>
<module>child-module2</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.9</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
এখানে, dependencyManagement অংশে আপনি সমস্ত কমন ডিপেনডেন্সি এবং pluginManagement অংশে প্লাগইনের কনফিগারেশন সরবরাহ করছেন।
- Child POM তৈরি করা: এখন আপনি Parent POM এর অধীনে Child POM ফাইল তৈরি করতে পারবেন। এই ফাইলটি শুধুমাত্র নির্দিষ্ট কনফিগারেশন এবং ডিপেনডেন্সি সম্বলিত হবে, যেগুলি Parent POM থেকে উত্তরাধিকারসূত্রে প্রাপ্ত হবে।
Child POM উদাহরণ:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <!-- Parent POM এর লোকেশন -->
</parent>
<artifactId>child-module1</artifactId>
<dependencies>
<!-- Parent POM থেকে inherited ডিপেনডেন্সি ব্যবহার করা হবে -->
</dependencies>
<build>
<plugins>
<!-- Parent POM থেকে inherited প্লাগইন ব্যবহার করা হবে -->
</plugins>
</build>
</project>
এখানে, parent ট্যাগের মাধ্যমে Parent POM এর রেফারেন্স যুক্ত করা হয়েছে, যার ফলে Child POM Parent POM থেকে সমস্ত কনফিগারেশন গ্রহণ করবে। আপনি চাইলে Child POM-এ অতিরিক্ত নির্দিষ্ট কনফিগারেশনও যোগ করতে পারেন।
Parent এবং Child POM এর মধ্যে সম্পর্ক
- Inheritance: Child POM Parent POM থেকে সমস্ত কনফিগারেশন, ডিপেনডেন্সি, প্লাগইন, এবং বিল্ড কনফিগারেশন উত্তরাধিকারসূত্রে গ্রহণ করে। তবে, Child POM নিজের প্রয়োজন অনুযায়ী এই কনফিগারেশনগুলিকে কাস্টমাইজ বা ওভাররাইডও করতে পারে।
- Module Aggregation: Parent POM-এ module এলিমেন্টের মাধ্যমে Child POM গুলির উল্লেখ করা হয়। এটি Parent POM-এ সমস্ত সাব-মডিউলকে সংযুক্ত করে, যেগুলি একসাথে বিল্ড করা যাবে।
- Dependency Management: Parent POM এর
dependencyManagementট্যাগের মাধ্যমে সমস্ত ডিপেনডেন্সির ভার্সন এবং ম্যানেজমেন্ট করা হয়, যা Child POM-এ প্রয়োগ হয়।
সারাংশ
Parent POM এবং Child POM হল Maven এর মূল বৈশিষ্ট্য, যা একাধিক মডিউল বা প্রোজেক্টের জন্য কনফিগারেশন ভাগ করতে সহায়তা করে। Parent POM একটি মূল ফাইল যা সকল Child POM-এ শেয়ার করা কনফিগারেশন এবং ডিপেনডেন্সি সংরক্ষণ করে। Child POM মডিউল-specific কনফিগারেশন ধারণ করে এবং Parent POM থেকে উত্তরাধিকারসূত্রে কনফিগারেশন গ্রহণ করে। এই পদ্ধতি multi-module projects তৈরি করতে সাহায্য করে এবং প্রোজেক্টের কনফিগারেশন ম্যানেজমেন্ট সহজ করে তোলে।
Maven একটি শক্তিশালী টুল যা build automation এবং dependency management প্রক্রিয়াকে সহজ করে তোলে। যখন আপনার প্রোজেক্টে একাধিক মডিউল (modules) থাকে, তখন Maven multi-module projects পরিচালনার জন্য অত্যন্ত কার্যকরী। একটি multi-module Maven project হল এমন একটি প্রোজেক্ট যেখানে একাধিক Maven সাব-প্রোজেক্ট (sub-project) থাকে, এবং এগুলি একসাথে বিল্ড এবং ম্যানেজ করা হয়।
এখানে আমরা Maven Multi-Module Projects কিভাবে কনফিগার এবং পরিচালনা করা যায়, তা আলোচনা করব।
১. Maven Multi-Module Project কি?
Maven Multi-Module Project একটি Maven প্রোজেক্ট যার মধ্যে একাধিক সাব-মডিউল বা সাব-প্রোজেক্ট থাকে। এগুলি সাধারণত একটি মূল প্রোজেক্ট বা প্যারেন্ট প্রোজেক্টের অধীনে থাকে এবং একটি pom.xml ফাইলের মাধ্যমে পরিচালিত হয়। প্রতিটি সাব-মডিউল তার নিজস্ব pom.xml ফাইল থাকতে পারে, তবে মূল pom.xml (parent pom.xml) সমস্ত মডিউলকে একত্রে পরিচালনা করে।
২. Maven Multi-Module Project কনফিগারেশন
এখানে Maven Multi-Module Project কনফিগার করার জন্য একটি উদাহরণ দেওয়া হল। এই উদাহরণে, একটি মূল প্রোজেক্ট এবং দুটি সাব-মডিউল থাকবে।
২.১ মুল POM ফাইল (Parent POM)
মুল pom.xml ফাইলটি সমস্ত মডিউল এবং তাদের ডিপেনডেন্সি ম্যানেজমেন্টের জন্য কনফিগারেশন প্রদান করে। এখানে আপনি modules ট্যাগে সমস্ত সাব-মডিউল তালিকাভুক্ত করেন।
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- Parent POM for the multi-module project -->
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>module-a</module>
<module>module-b</module>
</modules>
<dependencyManagement>
<dependencies>
<!-- Example dependency that all modules will inherit -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
এখানে, parent-project প্যারেন্ট পোমের অধীনে দুটি সাব-মডিউল রয়েছে:
module-amodule-b
এই প্যারেন্ট পোমটি মডিউলগুলির ডিপেনডেন্সি এবং অন্যান্য কনফিগারেশন একত্রিত করে।
২.২ সাব-মডিউল POM ফাইল
প্রতিটি সাব-মডিউলের pom.xml ফাইল থাকবে, তবে সেগুলি প্যারেন্ট পোমের অধীনে পরিচালিত হবে। যেমন:
module-a/pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>module-a</artifactId>
<dependencies>
<!-- Module-specific dependencies can be added here -->
</dependencies>
</project>
module-b/pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>module-b</artifactId>
<dependencies>
<!-- Module-specific dependencies can be added here -->
</dependencies>
</project>
এখানে, প্রতিটি সাব-মডিউল parent পোম ফাইলের অধীনে আছে এবং এর relativePath এ প্যারেন্ট পোমের অবস্থান দেওয়া হয়েছে।
৩. Maven Multi-Module Project বিল্ড করা
একবার আপনি সবকিছু কনফিগার করে ফেললে, আপনি পুরো multi-module project একসাথে বিল্ড করতে পারেন।
Build Command:
mvn clean install
এই কমান্ডটি মুল পোমের মাধ্যমে সমস্ত মডিউল বিল্ড করবে। Maven আপনার সমস্ত মডিউলগুলিকে একে একে ডিপেনডেন্সি অনুযায়ী বিল্ড করবে।
৪. Maven Multi-Module Project এর সুবিধা
- Centralized Dependency Management: প্যারেন্ট পোম ফাইলে সকল ডিপেনডেন্সি কনফিগার করার মাধ্যমে সমস্ত মডিউলগুলো একই ডিপেনডেন্সি ব্যবহার করবে, যা কনফিগারেশন সহজ করে।
- Single Build Command: একমাত্র
mvn clean installকমান্ড দিয়ে আপনি সমস্ত মডিউল একসাথে বিল্ড করতে পারেন, যা সময় এবং প্রচেষ্টা বাঁচায়। - Shared Plugins: আপনি একই Maven প্লাগইন প্যারেন্ট পোমে কনফিগার করে সমস্ত মডিউলের জন্য সেটি ব্যবহার করতে পারেন।
- Consistent Versioning: সব মডিউলের জন্য একটি সাধারণ সংস্করণ ব্যবহার করা সহজ হয়, যাতে সংস্করণ ব্যবস্থাপনা এবং আপডেট করার সময় সঙ্গতিপূর্ণতা বজায় থাকে।
- Easy to Scale: নতুন মডিউল যোগ করা খুবই সহজ এবং এটি অন্যান্য মডিউলগুলির সাথে সমন্বয় করে কাজ করে।
৫. Multi-Module Project-এ Dependency Management
মাঝে মাঝে, আপনি যদি একটি মডিউল থেকে অন্য মডিউলে ডিপেনডেন্সি যোগ করতে চান, তখন আপনি প্যারেন্ট পোমে সেন্ট্রাল ডিপেনডেন্সি কনফিগার করে এটি করতে পারেন।
উদাহরণ: যদি module-a থেকে module-b-এ ডিপেনডেন্সি যোগ করতে চান, তাহলে module-b/pom.xml-এ module-a যোগ করতে হবে:
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>module-a</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
এটি নিশ্চিত করবে যে module-b module-a এর ডিপেনডেন্সি হিসেবে কাজ করবে এবং একই বিল্ড প্রক্রিয়া অনুসরণ করবে।
৬. Conclusion
Maven multi-module projects আপনাকে আপনার প্রোজেক্টের মডিউলগুলিকে একত্রে ম্যানেজ করার সুযোগ দেয়। এটি dependency management, plugin configuration, এবং build automation সহজ করে তোলে। একাধিক মডিউল ব্যবস্থাপনা, নির্দিষ্ট প্রোজেক্ট পরিবেশে ডিপেনডেন্সি কনফিগারেশন এবং পুনঃব্যবহারযোগ্যতা নিশ্চিত করতে Maven এর multi-module ফিচার ব্যবহৃত হয়।
এটি বিশেষভাবে বড় এবং জটিল প্রকল্পগুলির জন্য অত্যন্ত উপকারী, যেখানে একাধিক সাব-প্রোজেক্ট একে অপরের উপর নির্ভরশীল থাকে এবং একসাথে পরিচালিত হয়।
Maven Multi-module Projects হল এমন প্রোজেক্ট যেখানে একাধিক মডিউল বা সাব-প্রোজেক্ট থাকে, যেগুলি একে অপরের সাথে যুক্ত থাকে। Maven ব্যবহার করে আপনি এই ধরনের প্রোজেক্ট খুব সহজে পরিচালনা করতে পারেন, যেখানে প্রতিটি মডিউল একটি স্বাধীন ইউনিট হিসেবে কাজ করে, তবে সব মডিউল একটি মূল প্যারেন্ট প্রোজেক্টের অধীনে থাকে।
ম্যাভেন মডিউলগুলিকে একসাথে বিল্ড করতে সাহায্য করে এবং প্রতিটি মডিউলের জন্য আলাদা আলাদা ডিপেনডেন্সি এবং কনফিগারেশন পরিচালনা করা সহজ করে তোলে। এই ধরনের প্রোজেক্ট সাধারণত বড় অ্যাপ্লিকেশন বা ফ্রেমওয়ার্ক তৈরি করার জন্য ব্যবহৃত হয় যেখানে বিভিন্ন মডিউল একে অপরের সাথে কাজ করে।
১. Maven Multi-module প্রোজেক্টের কাঠামো
একটি multi-module project এর সাধারণ কাঠামো হবে এরকম:
my-multi-module-project/
│
├── pom.xml (Parent POM)
│
├── module-1/
│ └── pom.xml (Module 1 POM)
│
├── module-2/
│ └── pom.xml (Module 2 POM)
│
└── module-3/
└── pom.xml (Module 3 POM)
এখানে, মূল parent POM ফাইলটি সমস্ত সাব-প্রোজেক্টের বা মডিউলের জন্য একটি কনফিগারেশন হিসেবে কাজ করে। প্রতিটি মডিউলের নিজস্ব pom.xml ফাইল থাকে, যা সেই মডিউলের নির্দিষ্ট কনফিগারেশন এবং ডিপেনডেন্সি ধারণ করে।
২. Maven Multi-module প্রোজেক্ট তৈরি করা
২.১ Parent POM Configuration
প্রথমে একটি মূল parent POM তৈরি করুন, যেটি সমস্ত মডিউলগুলিকে পরিচালনা করবে। এই POM ফাইলটি সব মডিউলের জন্য সাধারণ কনফিগারেশন, প্লাগইন এবং ডিপেনডেন্সি সরবরাহ করবে।
pom.xml (Parent POM):
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-multi-module-project</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging> <!-- Parent pom, no packaging needed -->
<modules>
<module>module-1</module>
<module>module-2</module>
<module>module-3</module>
</modules>
<dependencies>
<!-- Common dependencies across modules -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.9</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<!-- Common plugins for all modules -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
এখানে, modules ট্যাগের মধ্যে সমস্ত মডিউলগুলির নাম উল্লেখ করা হয়েছে এবং এই প্যারেন্ট POM ফাইলটি সমস্ত মডিউলের জন্য ডিপেনডেন্সি এবং প্লাগইন কনফিগারেশন সরবরাহ করবে।
২.২ Module POM Configuration
প্রতিটি মডিউলের নিজস্ব pom.xml ফাইল থাকতে হবে, যা ঐ মডিউল-specific কনফিগারেশন ধারণ করবে। এই ফাইলটি প্যারেন্ট POM থেকে প্রয়োজনীয় কনফিগারেশন ও ডিপেনডেন্সি উত্তরাধিকারসূত্রে পাবে।
module-1/pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>my-multi-module-project</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <!-- Relative path to the parent POM -->
</parent>
<artifactId>module-1</artifactId>
<dependencies>
<!-- Module-specific dependencies -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
</dependencies>
</project>
এখানে, parent ট্যাগের মাধ্যমে প্যারেন্ট POM এর সাথে সম্পর্ক স্থাপন করা হয়েছে এবং এই মডিউলটির জন্য অতিরিক্ত ডিপেনডেন্সি যোগ করা হয়েছে।
module-2/pom.xml এবং module-3/pom.xml ফাইলগুলি প্রায় একই রকম হবে, শুধু তাদের আলাদা artifactId থাকবে।
৩. মডিউলগুলো বিল্ড করা
একবার আপনি সমস্ত মডিউল কনফিগার করে ফেললে, আপনি মূল প্যারেন্ট প্রোজেক্ট ডিরেক্টরির মধ্যে থেকে বিল্ড প্রক্রিয়া শুরু করতে পারবেন। Maven সমস্ত মডিউল গুলি বিল্ড করতে সক্ষম হবে।
mvn clean install
এই কমান্ডটি সমস্ত মডিউলগুলি বিল্ড করবে এবং আপনার local repository তে ইনস্টল করবে। Maven প্রতিটি মডিউলটির pom.xml ফাইল অনুযায়ী ডিপেনডেন্সি ম্যানেজমেন্ট এবং বিল্ডিং প্রক্রিয়া সম্পাদন করবে।
৪. Parent POM এ Plugins এবং Profile Management
Maven multi-module প্রোজেক্টে, আপনি প্যারেন্ট POM ব্যবহার করে সমস্ত মডিউলের জন্য plugins এবং profiles কনফিগার করতে পারেন, যা কোড বিল্ড এবং টেস্ট প্রক্রিয়া সুনির্দিষ্ট করবে।
Example: Parent POM with Plugin Configuration
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
এখানে, Maven Surefire Plugin কনফিগার করা হয়েছে, যা সমস্ত মডিউলে টেস্টিং পরিচালনা করবে।
৫. Multi-module প্রোজেক্টের সুবিধা
- কোড পুনঃব্যবহার: একাধিক মডিউল ব্যবহার করে, আপনি সাধারণ কোড পুনঃব্যবহার করতে পারেন। যেমন ডাটা অ্যাক্সেস লেয়ার, সার্ভিস লেয়ার ইত্যাদি আলাদা মডিউলে রাখা যায় এবং অন্যান্য মডিউলে ব্যবহার করা যায়।
- ডিপেনডেন্সি ম্যানেজমেন্ট: মডিউলগুলির মধ্যে ডিপেনডেন্সি ম্যানেজমেন্ট প্যারেন্ট POM দ্বারা একত্রিত করা যায়।
- প্লাগইন কনফিগারেশন: আপনি প্যারেন্ট POM ব্যবহার করে সমস্ত মডিউলের জন্য সাধারণ প্লাগইন কনফিগারেশন দিতে পারেন, যা বিল্ড প্রক্রিয়া সহজ করে তোলে।
- টেস্টিং এবং ডিপ্লয়মেন্ট: সব মডিউল একসাথে টেস্ট এবং ডিপ্লয় করা সহজ হয়, কারণ Maven স্বয়ংক্রিয়ভাবে প্রতিটি মডিউলের জন্য নির্ধারিত টেস্ট এবং বিল্ড প্রক্রিয়া পরিচালনা করে।
সারাংশ
Maven Multi-module Projects জাভা প্রোজেক্টের জন্য একটি শক্তিশালী কনফিগারেশন টুল। এটি মডিউলগুলিকে একত্রে একসাথে কাজ করতে সহায়তা করে এবং ডিপেনডেন্সি, বিল্ড এবং প্লাগইন কনফিগারেশনগুলি কেন্দ্রীভূতভাবে পরিচালনা করতে সক্ষম করে। এই প্রক্রিয়া ডেভেলপমেন্ট প্রক্রিয়াকে দ্রুত এবং সহজ করে তোলে, বিশেষত বড় স্কেল প্রোজেক্টগুলির জন্য।
Read more