Maven একটি শক্তিশালী বিল্ড টুল যা Java প্রোজেক্টগুলির জন্য ডিপেনডেন্সি ম্যানেজমেন্ট এবং বিল্ড প্রক্রিয়া সহজ করে তোলে। Maven Dependency Scope একটি অত্যন্ত গুরুত্বপূর্ণ ফিচার যা নির্ধারণ করে যে, একটি নির্দিষ্ট লাইব্রেরি বা ডিপেনডেন্সি কোডের কোন অংশে এবং কখন ব্যবহৃত হবে।
Dependency Scope হল একটি নির্দিষ্ট লাইব্রেরি বা ডিপেনডেন্সির প্রোজেক্টের মধ্যে ব্যবহারের পরিসর নির্ধারণকারী একটি প্যারামিটার। এটি বলে দেয় কোন ডিপেনডেন্সি কখন এবং কোথায় অ্যাক্সেস করা যাবে এবং কোডের কোন পরিবেশে (যেমন, কম্পাইল, টেস্ট, প্রোডাকশন) ব্যবহৃত হবে।
Maven-এ বেশ কিছু scope রয়েছে, যার মধ্যে কয়েকটি জনপ্রিয় compile, provided, runtime, test, system, এবং import।
১. compile Scope
compile scope হল ডিফল্ট স্কোপ, যা ব্যবহার না করলে মেভেন নিজে থেকেই compile স্কোপ ধরবে। ডিপেনডেন্সি compile স্কোপে যুক্ত থাকলে এটি প্রোজেক্টের compile, runtime, এবং test সব স্টেজে ব্যবহার করা যাবে।
- Usage: এটি প্রোজেক্টের কোডে সব জায়গায় ব্যবহৃত হয়, এবং ডিপেনডেন্সি কম্পাইল এবং রানটাইম স্টেজে সব সময় প্রয়োজন হয়।
- Example: লাইব্রেরি বা ফ্রেমওয়ার্ক যা আপনার অ্যাপ্লিকেশনের প্রধান অংশ।
উদাহরণ:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.0</version>
</dependency>
এখানে, spring-core ডিপেনডেন্সি compile স্কোপে থাকবে, যা প্রোজেক্টের সব সময় ব্যবহারযোগ্য হবে।
২. provided Scope
provided scope হল এমন ডিপেনডেন্সি যেগুলি কম্পাইল এবং টেস্ট সময় প্রয়োজন, তবে রানটাইম সময়ে আপনি এটি সরবরাহ করবেন (সাধারণত Servlet Containers বা Web Servers)। এটি compile স্কোপে কাজ করবে তবে প্রোডাকশন পরিবেশে এটি ব্যবহৃত হবে না, কারণ পরিবেশে এটি আগে থেকেই উপস্থিত থাকে।
- Usage: সাধারণত Servlet API, JSP API, JUnit ইত্যাদি, যা সার্ভার বা রUNTIME পরিবেশে সরবরাহ করা হয়।
- Example: Servlet API যা Tomcat বা JBoss এর মত সার্ভারে সরবরাহ করা হয়।
উদাহরণ:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
এখানে, javax.servlet-api ডিপেনডেন্সি provided স্কোপে রাখা হয়েছে, যার মানে এটি রানটাইমে সরবরাহ করা হবে।
৩. runtime Scope
runtime scope হল এমন ডিপেনডেন্সি যা প্রোজেক্টের runtime সময়ে প্রয়োজন, তবে কম্পাইল সময় নয়। এই ডিপেনডেন্সি কোড কম্পাইলের সময় ব্যবহৃত হয় না, তবে অ্যাপ্লিকেশন চালানোর সময় এটি প্রয়োজন।
- Usage: যেমন, JDBC ড্রাইভার বা অন্যান্য লাইব্রেরি যা অ্যাপ্লিকেশন চালানোর সময় প্রয়োজন, কিন্তু কোড কম্পাইল করার সময় এটি গুরুত্বপূর্ণ নয়।
- Example: JDBC drivers, Database connectors ইত্যাদি।
উদাহরণ:
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
<scope>runtime</scope>
</dependency>
এখানে, mysql-connector-java ডিপেনডেন্সি runtime স্কোপে রাখা হয়েছে, যা রানটাইমে ব্যবহৃত হবে।
৪. test Scope
test scope হল এমন ডিপেনডেন্সি যেগুলি শুধুমাত্র unit testing বা integration testing এর সময় প্রয়োজন। এটি শুধুমাত্র টেস্ট কোডের জন্য ব্যবহৃত হয় এবং প্রোডাকশন পরিবেশে বা রানটাইমে এটি ব্যবহৃত হয় না।
- Usage: শুধুমাত্র টেস্ট কোডের জন্য, যেমন JUnit, Mockito, Hamcrest ইত্যাদি।
- Example: JUnit, Mockito লাইব্রেরি যা টেস্টিংয়ের জন্য ব্যবহার করা হয়।
উদাহরণ:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
এখানে, JUnit ডিপেনডেন্সি শুধুমাত্র টেস্টিং স্কোপে ব্যবহৃত হবে।
৫. system Scope
system scope হল একটি বিশেষ স্কোপ যেখানে ডিপেনডেন্সি সরাসরি আপনার সিস্টেমের ফাইল সিস্টেম থেকে ব্যবহার করা হয়, সাধারণত কোনো নির্দিষ্ট স্থানে রাখা ফাইল। এটি সাধারণত ব্যবহার করা হয় যদি আপনার ডিপেনডেন্সি কোন পাবলিক রেপোজিটরিতে না থাকে এবং আপনাকে সেগুলি সরাসরি আপনার সিস্টেম থেকে ব্যবহারের প্রয়োজন হয়।
- Usage: আপনি যখন সিস্টেমের কোনও নির্দিষ্ট ফাইল ব্যবহার করতে চান।
- Example: কোনো কাস্টম বা প্রাইভেট লাইব্রেরি যা পাবলিক রিপোজিটরিতে নেই।
উদাহরণ:
<dependency>
<groupId>com.example</groupId>
<artifactId>my-library</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/my-library.jar</systemPath>
</dependency>
এখানে, my-library.jar সরাসরি সিস্টেমের একটি ফাইল পাথ থেকে ব্যবহৃত হবে।
৬. import Scope
import scope শুধুমাত্র Maven BOM (Bill of Materials) এর জন্য ব্যবহৃত হয়, যা নির্দিষ্ট ডিপেনডেন্সির গ্রুপ বা ভার্সন রেঞ্জ নির্ধারণ করতে সাহায্য করে।
- Usage: মাভেনের মাধ্যমে ভার্সন ম্যানেজমেন্ট এবং ডিপেনডেন্সি ভার্সনের সমন্বয় করতে ব্যবহৃত হয়।
- Example: যখন আপনি একটি BOM ডিপেনডেন্সি প্রজেক্টে যোগ করতে চান।
উদাহরণ:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-bom</artifactId>
<version>3.8.1</version>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
এখানে, maven-bom ডিপেনডেন্সি import স্কোপে ব্যবহার করা হয়েছে।
সারাংশ
Maven Dependency Scope হল একটি অত্যন্ত গুরুত্বপূর্ণ বৈশিষ্ট্য যা আপনাকে নির্ধারণ করতে সহায়তা করে কোন লাইব্রেরি বা ডিপেনডেন্সি কোন সময় এবং কোথায় ব্যবহৃত হবে। আপনি compile, provided, runtime, test, system, এবং import এর মাধ্যমে ডিপেনডেন্সি ম্যানেজমেন্ট করতে পারেন। প্রতিটি স্কোপের ভিন্ন ব্যবহার রয়েছে এবং প্রোজেক্টের প্রয়োজনীয়তা অনুসারে স্কোপ নির্বাচন করা উচিত।
Read more