Apache Ivy একটি অত্যন্ত শক্তিশালী dependency management টুল যা Java প্রোজেক্টে বাইরের লাইব্রেরি বা ডিপেন্ডেন্সি সহজে ম্যানেজ করতে সহায়তা করে। Ivy দিয়ে আপনি আপনার প্রোজেক্টে dependencies এবং publications কিভাবে ডিফাইন করবেন তা ব্যাখ্যা করা হবে।
১. Dependencies ডিফাইন করা
Dependencies হল সেই লাইব্রেরি বা ফাইলগুলি যা আপনার প্রোজেক্টের কাজের জন্য প্রয়োজন। Ivy-এ ডিপেন্ডেন্সি ডিফাইন করতে আপনি ivy.xml ফাইল ব্যবহার করেন।
Dependencies ডিফাইন করার সময়:
- লাইব্রেরির নাম
- সংস্করণ
- রিপোজিটরি নির্ধারণ করা হয়।
- এছাড়া, আপনি ট্রান্সিটিভ (transitive) ডিপেন্ডেন্সি এবং ভার্সন কনফ্লিক্ট হ্যান্ডলিংও করতে পারেন।
Dependencies ডিফাইন করার উদাহরণ:
<ivy-module version="2.0">
<info organisation="com.example" module="my-app" />
<dependencies>
<!-- External dependencies -->
<dependency org="org.apache.commons" name="commons-lang3" rev="3.12.0"/>
<dependency org="junit" name="junit" rev="4.13.1"/>
</dependencies>
</ivy-module>
এখানে:
<info>ট্যাগের মাধ্যমে আপনার প্রোজেক্টের organisation (গ্রুপ) এবং module (মডিউল) নাম দেওয়া হয়েছে।<dependencies>ট্যাগের মধ্যে আপনার প্রোজেক্টের dependencies ডিফাইন করা হয়েছে, যেমনcommons-lang3এবং JUnit।
Dependency Options:
org: লাইব্রেরির গ্রুপ বা অর্গানাইজেশন।name: লাইব্রেরির নাম।rev: লাইব্রেরির সংস্করণ।
২. Transitive Dependencies
যখন আপনি একটি লাইব্রেরি ব্যবহার করেন, সেই লাইব্রেরির নিজস্ব ডিপেন্ডেন্সি থাকতে পারে। Ivy এই ডিপেন্ডেন্সি গুলিকেও স্বয়ংক্রিয়ভাবে ডাউনলোড করে, এদের transitive dependencies বলা হয়।
ধরা যাক, commons-lang3 লাইব্রেরিটি commons-collections লাইব্রেরির উপর নির্ভরশীল। তাহলে Ivy এই লাইব্রেরিটিকেও ডাউনলোড করবে যখন আপনি commons-lang3 ডাউনলোড করবেন।
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.12.0"/>
</dependencies>
এখানে:
commons-lang3এর ডিপেন্ডেন্সির মধ্যে commons-collections স্বয়ংক্রিয়ভাবে ডাউনলোড হবে।
৩. Version Conflict Resolution
যখন দুটি বা তার বেশি ডিপেন্ডেন্সি একই লাইব্রেরির ভিন্ন সংস্করণে নির্ভরশীল থাকে, তখন Ivy স্বয়ংক্রিয়ভাবে একটি সংস্করণ নির্বাচন করে। আপনি চাইলে Ivy কে version conflict হ্যান্ডল করার জন্য কনফিগারও করতে পারেন।
উদাহরণ:
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.12.0"/>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.10.0"/>
</dependencies>
এখানে:
- যদি দুটি ডিপেন্ডেন্সি
commons-lang3এর দুটি ভিন্ন সংস্করণে নির্ভরশীল হয়, তবে Ivy সর্বশেষ সংস্করণ (যেমন 3.12.0) রেজলভ করবে।
৪. Publications ডিফাইন করা
Publications হল সেই ফাইল বা আর্টিফ্যাক্টগুলি যা আপনার প্রোজেক্ট তৈরি করবে এবং অন্যদের জন্য উপলব্ধ হবে (যেমন লাইব্রেরি)। যখন আপনি একটি লাইব্রেরি তৈরি করেন বা প্রকাশ করেন, তখন সেই লাইব্রেরি Ivy রিপোজিটরিতে পাবলিশ হয় এবং অন্যান্য প্রোজেক্ট সেটি ব্যবহার করতে পারে।
Ivy-এ পাবলিকেশন ডিফাইন করার জন্য ivy.xml ফাইলের মধ্যে <publications> ট্যাগ ব্যবহার করা হয়। এটি সাধারণত JAR, WAR, EAR, অথবা অন্য কোনো আর্কাইভ ফাইল হবে।
Publications ডিফাইন করার উদাহরণ:
<ivy-module version="2.0">
<info organisation="com.example" module="my-app"/>
<publications>
<artifact name="my-app" type="jar" ext="jar"/>
</publications>
</ivy-module>
এখানে:
<publications>ট্যাগের মাধ্যমে আপনি যে ফাইলটি পাবলিশ করতে চান সেটি নির্ধারণ করা হয়েছে। এখানেmy-app.jarফাইলটি পাবলিশ করা হবে।
Artifact Type:
- name: Artifact এর নাম (যেমন
my-appবাcommons-lang3) - type: Artifact এর ধরনের ফাইল (যেমন
jar,war) - ext: ফাইলের এক্সটেনশন (যেমন
.jar)
৫. Artifact Publish এবং Retrieve
আপনার প্রোজেক্টের artifact পাবলিশ করার পর, আপনি এই artifact অন্য কোনো প্রোজেক্টে ব্যবহার করতে পারেন। Ivy লাইব্রেরি বা artifact ডাউনলোড করার জন্য ivy:retrieve টাস্ক ব্যবহার করে।
<target name="publish">
<ivy:publish/>
</target>
<target name="retrieve">
<ivy:retrieve/>
</target>
ivy:publishটাস্কটি artifact রিপোজিটরিতে পাবলিশ করবে।ivy:retrieveটাস্কটি artifact রিপোজিটরি থেকে ডাউনলোড করবে।
৬. Custom Repositories
আপনি যদি নিজের Ivy রিপোজিটরি ব্যবহার করতে চান, তবে সেটি কনফিগার করতে পারেন।
<repositories>
<repository name="central" url="https://repo.maven.apache.org/maven2"/>
<repository name="private-repo" url="https://my-private-repo.com/ivy"/>
</repositories>
এখানে:
<repository>ট্যাগটি রিপোজিটরি URL এবং নাম নির্দেশ করে, যেখানে থেকে Ivy লাইব্রেরি ডাউনলোড বা আপলোড করবে।
সারাংশ
Apache Ivy একটি শক্তিশালী টুল যা Java প্রোজেক্টে ডিপেন্ডেন্সি ম্যানেজমেন্টে সহায়তা করে। Dependencies এবং Publications হল Ivy এর মূল ধারণা:
- Dependencies: আপনার প্রোজেক্টের বাইরের লাইব্রেরি বা জার ফাইল, যেগুলি আপনার প্রোজেক্টের জন্য প্রয়োজনীয়।
- Publications: আপনার প্রোজেক্টে তৈরি হওয়া লাইব্রেরি বা ফাইল, যেগুলি অন্য প্রোজেক্টে ব্যবহার করার জন্য পাবলিশ করা হয়।
এছাড়াও, Ivy ডিপেন্ডেন্সির রেজলভেশন, ভার্সন ম্যানেজমেন্ট, ট্রান্সিটিভ ডিপেন্ডেন্সি এবং কাস্টম রিপোজিটরি সাপোর্ট প্রদান করে। Ivy-এর মাধ্যমে আপনি লাইব্রেরি ম্যানেজমেন্টকে আরো সহজ এবং কার্যকরী করতে পারবেন।
Read more