Maven একটি জনপ্রিয় বিল্ড টুল যা ডিপেনডেন্সি ম্যানেজমেন্ট, বিল্ড অটোমেশন এবং ডিপ্লয়মেন্টের জন্য ব্যবহৃত হয়। একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল Versioning, যা প্রোজেক্টের প্রতিটি সংস্করণ ট্র্যাক এবং ম্যানেজ করতে সহায়তা করে। Versioning এর মাধ্যমে আপনি আপনার প্রোজেক্টের কোডের সংস্করণ এবং তার পরিবর্তনগুলো সঠিকভাবে নিয়ন্ত্রণ করতে পারেন।
এই টিউটোরিয়ালে, আমরা Maven এ Versioning কনফিগারেশন সম্পর্কে আলোচনা করব এবং Versioning এর বিভিন্ন ধরনের কনফিগারেশন উদাহরণ সহ দেখব।
১. Maven Versioning Overview
Maven Versioning হল একটি প্রক্রিয়া যা আপনার প্রোজেক্টের কোডের সংস্করণ নির্ধারণ করে এবং সেটি নিয়ন্ত্রণ করে। প্রতিটি প্রোজেক্টের জন্য একটি ইউনিক Version থাকে যা প্রোজেক্টের অবস্থা বা রিলিজের সংখ্যা নির্দেশ করে।
Maven Versioning তিনটি প্রধান অংশে বিভক্ত:
- Major Version: প্রধান সংস্করণ, যখন বড় ধরনের পরিবর্তন বা ব্রেকিং চেঞ্জ হয়।
- Minor Version: মাইনর সংস্করণ, যখন নতুন ফিচার যোগ করা হয় কিন্তু পেছনে থাকা কোডের সাথে সামঞ্জস্য থাকে।
- Patch Version: প্যাচ সংস্করণ, যখন বাগ ফিক্স বা ছোটখাটো উন্নতি করা হয়।
একটি সাধারণ মেভেন ভার্সন ফরম্যাট হবে:
<major>.<minor>.<patch>-<qualifier>
উদাহরণ:
1.0.0— প্রথম রিলিজ (Major: 1, Minor: 0, Patch: 0)1.2.3— দ্বিতীয় মাইনর রিলিজ (Major: 1, Minor: 2, Patch: 3)1.2.3-SNAPSHOT— উন্নয়ন সংস্করণ, কাজ চলমান (SNAPSHOT একটি কাস্টম ভার্সন)
২. Maven Versioning কনফিগারেশন উদাহরণ
pom.xml ফাইলের মাধ্যমে আপনি আপনার প্রোজেক্টের ভার্সন কনফিগার করতে পারেন। নিচে একটি সাধারণ Maven Versioning কনফিগারেশন উদাহরণ দেয়া হলো।
<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>
<!-- Project Coordinates -->
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version> <!-- Version Configuration -->
<dependencies>
<!-- Your dependencies go here -->
</dependencies>
</project>
এখানে, version এলিমেন্টে প্রোজেক্টের সংস্করণ দেওয়া হয়েছে: 1.0.0। এটি মেভেনের জন্য একটি স্ট্যাটিক ভার্সন।
৩. Maven Versioning Types
Maven-এ কিছু সাধারণ Versioning টাইপ ব্যবহার করা হয়, যা মূলত বিভিন্ন রিলিজের অবস্থান বা স্ট্যাটাস নির্দেশ করে।
৩.১ Release Version
রিলিজ ভার্সন হলো একটি স্থির ভার্সন যেটি প্রোডাকশন পরিবেশে ব্যবহৃত হয়। এটি সাধারণত major.minor.patch ফরম্যাটে থাকে, যেমন 1.0.0।
<version>1.0.0</version>
৩.২ Snapshot Version
SNAPSHOT ভার্সন হলো একটি ডেভেলপমেন্ট সংস্করণ, যা মডিফিকেশন বা পরিবর্তনের মধ্যে থাকে এবং ভবিষ্যতে আপডেট হতে পারে। এটি প্রাথমিক বা উন্নয়ন কাজের জন্য ব্যবহৃত হয়।
<version>1.0.0-SNAPSHOT</version>
এখানে, 1.0.0-SNAPSHOT হলো একটি ডেভেলপমেন্ট সংস্করণ। প্রতিবার নতুন কোড কমিট হলে এটি Maven Central Repository-এ আপডেট হবে।
৩.৩ Qualifier Version
কোয়ালিফায়ার ভার্সন হলো নির্দিষ্ট কোনো রিলিজের সুনির্দিষ্ট অবস্থা চিহ্নিত করে। যেমন: alpha, beta, rc (Release Candidate) ইত্যাদি।
<version>1.0.0-beta</version>
এখানে, 1.0.0-beta হলো একটি বেটা সংস্করণ, যা পরীক্ষা বা ফিচার পরীক্ষা করার জন্য ব্যবহৃত হয়।
৪. Maven Versioning with Dependencies
Maven-এ আপনি আপনার প্রোজেক্টের dependencies এর জন্য নির্দিষ্ট ভার্সন কনফিগার করতে পারেন। যখন আপনি একটি নির্দিষ্ট ভার্সন ব্যবহার করেন, এটি আপনার প্রোজেক্টের কনফিগারেশন ফাইলের অংশ হয়ে যায়।
৪.১ Dependency Versioning Example
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.8</version> <!-- Dependency Version -->
</dependency>
</dependencies>
এখানে, spring-core ডিপেনডেন্সির জন্য 5.3.8 ভার্সন ব্যবহার করা হয়েছে।
৪.২ Version Ranges in Dependencies
Maven এর মাধ্যমে আপনি ডিপেনডেন্সির জন্য ভার্সন রেঞ্জ নির্ধারণ করতে পারেন, যা একটি নির্দিষ্ট সীমার মধ্যে ভার্সন নির্বাচন করতে সহায়তা করে।
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>[3.0,4.0)</version> <!-- Version Range -->
</dependency>
এখানে, commons-lang3 ডিপেনডেন্সির ভার্সন 3.0 এবং 4.0 এর মধ্যে কোনো একটি ভার্সন নির্বাচিত হবে।
৫. Maven Dependency Management and Version Conflict
Maven ডিপেনডেন্সি ম্যানেজমেন্টে ভার্সন কনফ্লিক্ট হতে পারে যখন একাধিক ডিপেনডেন্সি একে অপরের সাথে ভার্সন কনফ্লিক্ট করে। Maven এই সমস্যা সমাধান করার জন্য dependency mediation ব্যবহার করে, যেখানে সর্বশেষ ডিপেনডেন্সি বা নির্দিষ্ট ডিপেনডেন্সির ভার্সন প্রাধান্য পায়।
৫.১ Version Conflict Resolution Example
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.6.3</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.8.1</version> <!-- Conflict Version -->
</dependency>
</dependencies>
এখানে, দুটি আলাদা ভার্সন ব্যবহার করা হয়েছে। Maven সাধারণত 3.8.1 ভার্সনকে প্রাধান্য দেবে।
৬. Maven Versioning for Release and Snapshot Builds
Maven এর মাধ্যমে একটি প্রোজেক্টের release এবং snapshot ভার্সন আলাদা করা যায়। সাধারণত, release ভার্সনটি প্রোডাকশনে ব্যবহৃত হয় এবং snapshot ভার্সনটি ডেভেলপমেন্টে ব্যবহৃত হয়। Maven বিভিন্ন পরিবেশের জন্য একাধিক প্রোফাইল সমর্থন করে, যা ভার্সনিং কাস্টমাইজ করার সুযোগ দেয়।
৬.১ Release Version Example
<version>1.0.0</version> <!-- Release Version -->
৬.২ Snapshot Version Example
<version>1.0.0-SNAPSHOT</version> <!-- Snapshot Version -->
এখানে, 1.0.0-SNAPSHOT ডেভেলপমেন্ট বা পরীক্ষামূলক ভার্সন এবং 1.0.0 একটি স্থির রিলিজ ভার্সন।
সারাংশ
Maven Versioning এর মাধ্যমে আপনি আপনার প্রোজেক্টের বিভিন্ন সংস্করণ নিয়ন্ত্রণ করতে পারেন, যা প্রোজেক্টের উন্নয়ন, টেস্টিং এবং ডিপ্লয়মেন্ট প্রক্রিয়াগুলি পরিচালনা করতে সাহায্য করে। Versioning এর মাধ্যমে আপনি মেভেন প্রোজেক্টে Release, Snapshot এবং Qualifier ভার্সনিং কনফিগার করতে পারেন। এছাড়াও, Maven এর মাধ্যমে আপনি Dependency Management এবং Version Conflict Resolution এর মতো গুরুত্বপূর্ণ কাজগুলো সহজে করতে পারেন।
Read more