অ্যাপাচি আইভি (Apache Ivy) একটি শক্তিশালী ডিপেনডেন্সি ম্যানেজমেন্ট টুল যা জাভা প্রোজেক্টগুলোর ডিপেনডেন্সি সমস্যা যেমন dependency conflicts এবং exclusion সমাধানে সাহায্য করে। যখন বিভিন্ন লাইব্রেরি একই ডিপেনডেন্সি বা তার ভিন্ন সংস্করণ দাবি করে, তখন ডিপেনডেন্সি কনফ্লিক্ট হতে পারে। এই কনফ্লিক্টগুলোকে dependency exclusion এবং conflict management এর মাধ্যমে সহজেই মোকাবেলা করা যায়।
Dependency Exclusion হল একটি প্রক্রিয়া যার মাধ্যমে আপনি নির্দিষ্ট ডিপেনডেন্সি গুলোকে আপনার প্রোজেক্টে অন্তর্ভুক্ত হতে আটকাতে পারেন। এটি সাধারণত তখন ব্যবহৃত হয়, যখন একটি ডিপেনডেন্সি একাধিক লাইব্রেরির মাধ্যমে অন্তর্ভুক্ত হয় এবং এর ফলে কনফ্লিক্ট তৈরি হয়। আপনি বিশেষ করে যে ডিপেনডেন্সি গুলো চান না, সেগুলো exclude
ট্যাগ ব্যবহার করে বাদ দিতে পারেন।
আপনি যখন কোনো ডিপেনডেন্সি ফাইলের মধ্যে exclude ট্যাগ ব্যবহার করেন, তখন আইভি সেই নির্দিষ্ট ডিপেনডেন্সিটি সেই নির্দিষ্ট লাইব্রেরি থেকে বাদ দিবে এবং শুধুমাত্র আপনার চাহিদা অনুযায়ী ডিপেনডেন্সিগুলি রিট্রিভ করবে।
ধরা যাক, আপনার প্রোজেক্টে Library A
এবং Library B
দুটি ডিপেনডেন্সি রয়েছে, এবং Library A এর মধ্যে Library C এর নির্দিষ্ট একটি সংস্করণ অন্তর্ভুক্ত রয়েছে। আপনি যদি Library C
বাদ দিতে চান, তাহলে আপনি exclude
ব্যবহার করতে পারেন:
<ivy-module version="2.0">
<info organisation="com.example" module="myproject"/>
<dependencies>
<dependency org="com.library" name="library-a" rev="1.0">
<exclude org="com.library" name="library-c"/>
</dependency>
<dependency org="com.library" name="library-b" rev="1.0"/>
</dependencies>
</ivy-module>
এখানে, Library A থেকে Library C এক্সক্লুড করা হয়েছে, এবং Library B
এর মধ্যে কোনো এক্সক্লুশন নেই।
Conflict Management হল এমন একটি প্রক্রিয়া যার মাধ্যমে একাধিক ডিপেনডেন্সি যদি একে অপরের সাথে ভার্সন কনফ্লিক্ট করে, তবে আইভি কনফ্লিক্ট সমাধান করে সঠিক ভার্সন নির্বাচন করতে সাহায্য করে। উদাহরণস্বরূপ, যখন একটি ডিপেনডেন্সি দুটি লাইব্রেরির মধ্যে ভিন্ন সংস্করণ থাকতে পারে, তখন আইভি একটি নির্দিষ্ট রেজল্যুশন কৌশল অনুসরণ করে সঠিক ভার্সন নির্বাচিত করবে।
আইভি কনফ্লিক্ট ম্যানেজমেন্টের জন্য কিছু strategy বা কৌশল প্রদান করে। এই কৌশলগুলি latest, highest, বা strict হতে পারে, যেখানে:
<ivysettings>
<conflict-management>
<strategy name="highest"/>
</conflict-management>
</ivysettings>
এখানে, highest স্ট্রাটেজি নির্বাচন করা হয়েছে, যার মাধ্যমে কনফ্লিক্টের ক্ষেত্রে সর্বোচ্চ সংস্করণটি রেজল্ভ করা হবে।
আইভি কনফ্লিক্ট ম্যানেজমেন্টের জন্য কিছু কৌশল রয়েছে যেগুলোর মাধ্যমে আপনি কিভাবে কনফ্লিক্ট সমাধান করবেন তা নির্ধারণ করতে পারেন।
latest
কৌশলটি ব্যবহার করলে, আইভি সর্বশেষ সংস্করণটি চয়ন করবে। উদাহরণস্বরূপ:
<ivysettings>
<conflict-management>
<strategy name="latest"/>
</conflict-management>
</ivysettings>
এটি সমস্ত কনফ্লিক্টের ক্ষেত্রে সর্বশেষ সংস্করণ গ্রহণ করবে।
highest
কৌশলটি সবচেয়ে উচ্চ সংস্করণটি নির্বাচন করবে। যদি আপনার প্রকল্পে একই ডিপেনডেন্সির দুটি সংস্করণ থাকে, তবে এটি সর্বোচ্চ সংস্করণটিই নেবে:
<ivysettings>
<conflict-management>
<strategy name="highest"/>
</conflict-management>
</ivysettings>
এটি নিশ্চিত করবে যে সর্বোচ্চ সংস্করণ ব্যবহার হবে।
strict
কৌশলটি খুবই কড়া, যেখানে এটি ডিপেনডেন্সি কনফ্লিক্ট ঘটলে, আইভি কোনো সংস্করণ নির্বাচন করবে না এবং একে সরাসরি সমস্যা হিসেবে গণ্য করবে:
<ivysettings>
<conflict-management>
<strategy name="strict"/>
</conflict-management>
</ivysettings>
এটি কনফ্লিক্টকে সরাসরি সমস্যা হিসেবে গ্রহণ করবে এবং নির্দিষ্ট সংস্করণ সমাধান না হলে বিল্ড সফল হবে না।
ধরা যাক, আপনার প্রোজেক্টে দুটি ডিপেনডেন্সি রয়েছে যা একই লাইব্রেরির ভিন্ন সংস্করণ দাবি করছে:
<ivy-module version="2.0">
<info organisation="com.example" module="myproject"/>
<dependencies>
<dependency org="com.library" name="library-x" rev="1.0"/>
<dependency org="com.library" name="library-x" rev="2.0"/>
</dependencies>
</ivy-module>
এখানে library-x এর দুটি সংস্করণ রয়েছে। যদি আপনি highest স্ট্রাটেজি ব্যবহার করেন:
<ivysettings>
<conflict-management>
<strategy name="highest"/>
</conflict-management>
</ivysettings>
তাহলে আইভি স্বয়ংক্রিয়ভাবে library-x এর 2.0
সংস্করণটি গ্রহণ করবে, কারণ এটি সবচেয়ে নতুন সংস্করণ।
এই সব কৌশল এবং সেটিংসগুলি ডিপেনডেন্সি ম্যানেজমেন্ট প্রক্রিয়াকে আরো দক্ষ এবং স্থিতিশীল করে তোলে, বিশেষ করে বড় প্রোজেক্টের ক্ষেত্রে যেখানে অনেক ডিপেনডেন্সি থাকতে পারে।
অ্যাপাচি আইভি (Apache Ivy) একটি ডিপেনডেন্সি ম্যানেজমেন্ট টুল যা Java প্রোজেক্টে ব্যবহৃত লাইব্রেরি এবং ডিপেনডেন্সি ম্যানেজমেন্ট সহজ করে। যখন আপনি আপনার প্রোজেক্টের ডিপেনডেন্সি কনফিগার করেন, তখন আপনি হয়তো কিছু নির্দিষ্ট ডিপেনডেন্সি বাদ দিতে চাইবেন। এই প্রক্রিয়াটিকে Exclude Rules বলা হয়, যেখানে আপনি কোনো নির্দিষ্ট ডিপেনডেন্সি বা তার নির্দিষ্ট সংস্করণ বাদ দিতে পারেন। এটি বিশেষভাবে প্রয়োজনীয় যখন আপনার প্রোজেক্টের একটি লাইব্রেরি অন্য লাইব্রেরির কিছু নির্দিষ্ট সংস্করণ বা ডিপেনডেন্সি ব্যবহার করতে চায় যা আপনার প্রোজেক্টের সাথে সামঞ্জস্যপূর্ণ নয়।
আইভি "exclude" নিয়মের মাধ্যমে এটি সম্ভব করে তোলে। এই নিয়মটি ব্যবহার করে আপনি নির্দিষ্ট লাইব্রেরি, ভার্সন, অথবা ডিপেনডেন্সি ছেঁকে বাদ দিতে পারেন।
Exclude Rules ব্যবহার করার মাধ্যমে আপনি আপনার প্রোজেক্টের ডিপেনডেন্সি গ্রাফ থেকে কিছু নির্দিষ্ট লাইব্রেরি বা ডিপেনডেন্সি বাদ দিতে পারেন। আইভি স্বয়ংক্রিয়ভাবে ডিপেনডেন্সি রেজলভ করার সময়ে যদি কোনো লাইব্রেরি কোনো অপর্যাপ্ত বা অপ্রয়োজনীয় ডিপেনডেন্সি আনে, তবে আপনি সেটি বাদ দিতে পারেন।
আইভি আপনাকে একাধিক exclusion নিয়ম বা "exclude" যুক্ত করার সুবিধা দেয়, যা নির্দিষ্ট ডিপেনডেন্সি বা তার নির্দিষ্ট সংস্করণকে বাদ দিতে সাহায্য করে।
একটি ডিপেনডেন্সি এভাবে নির্ধারণ করা হয় যাতে কিছু নির্দিষ্ট ডিপেনডেন্সি বাদ দেওয়া যায়। নিচে একটি উদাহরণ দেওয়া হলো, যেখানে ডিপেনডেন্সি এক্সক্লুড করা হচ্ছে।
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.10">
<exclude org="org.slf4j" name="slf4j-api"/>
</dependency>
</dependencies>
এখানে:
commons-lang3
লাইব্রেরির ডিপেনডেন্সি slf4j-api
লাইব্রেরিটি এক্সক্লুড করা হয়েছে।org.slf4j:slf4j-api
লাইব্রেরিটি commons-lang3
লাইব্রেরির ডিপেনডেন্সি থেকে বাদ দেওয়া হয়েছে।<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.10">
<exclude org="org.slf4j" name="slf4j-api" rev="1.7.2"/>
</dependency>
</dependencies>
এখানে:
commons-lang3
লাইব্রেরি থেকে slf4j-api
লাইব্রেরির সংস্করণ 1.7.2
এক্সক্লুড করা হয়েছে।conf
অপশনconf
অপশনটি ব্যবহার করে আপনি কোন কনফিগারেশন (যেমন compile
, runtime
, test
) এর জন্য ডিপেনডেন্সি এক্সক্লুড করতে পারেন। এটি বিশেষভাবে উপকারী যখন আপনি ডিপেনডেন্সির নির্দিষ্ট কনফিগারেশনে exclusion প্রয়োগ করতে চান।
<dependency org="org.apache.commons" name="commons-lang3" rev="3.10">
<exclude org="org.slf4j" name="slf4j-api" conf="compile"/>
</dependency>
এখানে, slf4j-api
লাইব্রেরিটি শুধুমাত্র compile
কনফিগারেশন থেকে এক্সক্লুড হবে।
module
অপশনএই অপশনটি ব্যবহার করে আপনি নির্দিষ্ট মডিউল বা লাইব্রেরি এক্সক্লুড করতে পারেন। যেমন কোনো নির্দিষ্ট মডিউলের ডিপেনডেন্সি বাদ দিতে চাইলে আপনি module
অপশন ব্যবহার করবেন।
<dependency org="org.apache.commons" name="commons-lang3" rev="3.10">
<exclude module="commons-logging"/>
</dependency>
এখানে, commons-logging
মডিউলটি এক্সক্লুড করা হয়েছে, যাতে এটি আপনার প্রোজেক্টের ডিপেনডেন্সি গ্রাফে না আসে।
type
অপশনtype
অপশনটি ব্যবহার করে আপনি নির্দিষ্ট ফাইল টাইপ বা ডিপেনডেন্সি ধরনের exclusion করতে পারেন। এটি খুবই উপকারী যখন আপনি বিশেষ কোনো ফাইল বা এক্সটেনশন বাদ দিতে চান।
<dependency org="org.apache.commons" name="commons-lang3" rev="3.10">
<exclude type="jar"/>
</dependency>
এখানে, commons-lang3
লাইব্রেরির jar
ফাইল টাইপ এক্সক্লুড করা হয়েছে।
নিচে একটি পূর্ণাঙ্গ উদাহরণ দেওয়া হলো যেখানে একাধিক exclusion নিয়ম প্রয়োগ করা হয়েছে:
<ivy-module version="2.0">
<info organisation="com.example" module="my-project" revision="1.0.0"/>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.10">
<!-- Exclude slf4j-api version 1.7.2 from commons-lang3 -->
<exclude org="org.slf4j" name="slf4j-api" rev="1.7.2"/>
<!-- Exclude commons-logging module -->
<exclude module="commons-logging"/>
</dependency>
</dependencies>
</ivy-module>
এখানে:
slf4j-api
লাইব্রেরির 1.7.2
সংস্করণ এবং commons-logging
মডিউল এক্সক্লুড করা হয়েছে।অ্যাপাচি আইভি (Apache Ivy) ডিপেনডেন্সি ম্যানেজমেন্টে exclude
রুলস ব্যবহার করে আপনি অপ্রয়োজনীয় বা অযাচিত ডিপেনডেন্সি বাদ দিতে পারেন। এটি বিভিন্ন উপায়ে ডিপেনডেন্সি এক্সক্লুড করতে সহায়তা করে, যেমন লাইব্রেরি, সংস্করণ, মডিউল, এবং ফাইল টাইপের মাধ্যমে। এক্সক্লুড নিয়মগুলো ব্যবহার করে আপনি আপনার প্রোজেক্টের ডিপেনডেন্সি গ্রাফে অপ্রয়োজনীয় বা অযাচিত ডিপেনডেন্সি বাদ দিয়ে, প্রোজেক্টের পারফরম্যান্স এবং নির্ভরযোগ্যতা বৃদ্ধি করতে পারেন।
Apache Ivy একটি শক্তিশালী ডিপেনডেন্সি ম্যানেজমেন্ট টুল যা আপনাকে আপনার প্রোজেক্টের লাইব্রেরি এবং ডিপেনডেন্সি স্বয়ংক্রিয়ভাবে ম্যানেজ করতে সহায়তা করে। তবে ডিপেনডেন্সি ম্যানেজমেন্টে সাধারণত ভার্সন কনফ্লিক্ট হয়ে থাকে, যেখানে একাধিক ডিপেনডেন্সি একই লাইব্রেরির বিভিন্ন ভার্সন ব্যবহার করে। এই কনফ্লিক্টগুলি সমাধান করতে Ivy আপনাকে বিভিন্ন Conflict Resolution কৌশল প্রদান করে।
এই নিবন্ধে আমরা Ivy Conflict Resolution কৌশল সম্পর্কে বিস্তারিত আলোচনা করব এবং দেখব কিভাবে আপনি ডিপেনডেন্সি কনফ্লিক্ট সমাধান করতে পারেন।
Conflict Resolution হল সেই প্রক্রিয়া যার মাধ্যমে আপনি একাধিক ডিপেনডেন্সির মধ্যে ভার্সন কনফ্লিক্ট সমাধান করেন। Ivy যখন ডিপেনডেন্সি রেজোল্ভ করে, তখন এটি কখনও কখনও দুটি বা তার বেশি লাইব্রেরির বিভিন্ন ভার্সন পায় যা একই ডিপেনডেন্সির অংশ হতে পারে। এই পরিস্থিতিতে, Ivy কনফ্লিক্ট সমাধান করতে কিছু কৌশল বা নিয়ম ব্যবহার করে।
Ivy ডিপেনডেন্সি রেজোলিউশনের জন্য কয়েকটি কৌশল সরবরাহ করে, যার মাধ্যমে আপনি কনফ্লিক্ট সমাধান করতে পারেন। Ivy তে কনফ্লিক্ট রেজোলিউশন কৌশলগুলি কনফিগার করা হয় ivysettings.xml
ফাইলে অথবা ivy.xml ফাইলের মধ্যে। এখানে Ivy সাধারণত ডিফল্ট কৌশল, সর্বশেষ সংস্করণ গ্রহণ এবং নির্দিষ্ট সংস্করণ নির্বাচন সহ বিভিন্ন কৌশল ব্যবহার করে কনফ্লিক্ট সমাধান করতে পারে।
Ivy latest
কৌশল ব্যবহার করে সর্বশেষ সংস্করণটি নির্বাচন করতে পারে, যা রেপোজিটরি থেকে পাওয়া যাবে। এটি ডিপেনডেন্সি কনফ্লিক্ট সমাধানে সবচেয়ে সাধারণ কৌশল, যেখানে Ivy সর্বশেষ সংস্করণটি ব্যবহার করবে।
<conflict-management>
<resolve strategy="latest"/>
</conflict-management>
এখানে strategy="latest"
মানে Ivy সর্বশেষ উপলব্ধ সংস্করণটি নির্বাচন করবে।
first
কৌশলটি ব্যবহার করলে Ivy ডিপেনডেন্সি কনফ্লিক্টে প্রথম নির্বাচন করা সংস্করণটি গ্রহণ করবে এবং অন্যান্য সংস্করণগুলো উপেক্ষা করবে।
<conflict-management>
<resolve strategy="first"/>
</conflict-management>
এটি first
কৌশল ব্যবহার করবে, যেখানে প্রথম পাওয়া সংস্করণটি নির্বাচন করা হবে এবং অন্যান্য সংস্কণগুলো উপেক্ষা করা হবে।
Ivy ডিফল্টভাবে latest
কৌশল ব্যবহার করে, তবে আপনি যদি নিজের কৌশল ব্যবহার করতে চান, তবে আপনি নির্দিষ্টভাবে সেটি কনফিগার করতে পারেন। এই কৌশলটি ডিপেনডেন্সি রেজোলিউশন প্রক্রিয়ার জন্য সর্বোত্তম উপায় দেয়।
<conflict-management>
<resolve strategy="default"/>
</conflict-management>
এটি Ivy তে ডিফল্ট কৌশল ব্যবহার করে।
replace
কৌশলটি ব্যবহার করলে Ivy একটি নির্দিষ্ট সংস্করণকে অন্য একটি সংস্করণ দিয়ে প্রতিস্থাপন করবে। এটি তখন ব্যবহৃত হয় যখন আপনি নির্দিষ্ট সংস্করণে রেজোলিউশন চাইবেন।
<conflict-management>
<resolve strategy="replace"/>
</conflict-management>
এটি একটি সংস্করণকে অন্য সংস্করণ দিয়ে প্রতিস্থাপন করবে।
merge
কৌশলটি তখন ব্যবহার করা হয় যখন একাধিক ডিপেনডেন্সি একই লাইব্রেরির আলাদা অংশ ব্যবহার করে, এবং Ivy সেই অংশগুলিকে একত্রিত করে।
Ivy তে কনফ্লিক্ট ম্যানেজমেন্ট কনফিগার করা হয় সাধারণত ivysettings.xml ফাইলে। এই ফাইলের মধ্যে আপনি কনফ্লিক্ট রেজোলিউশনের জন্য নির্দিষ্ট কৌশল নির্ধারণ করতে পারেন।
<ivysettings>
<conflict-management>
<resolve strategy="latest"/>
</conflict-management>
</ivysettings>
এখানে:
strategy="latest"
: সর্বশেষ সংস্করণটি রেজোলভ করার কৌশল নির্ধারণ করে।Ivy যখন ডিপেনডেন্সি রেজোলভ করে, তখন এটি প্রথমে আপনার ivy.xml ফাইল থেকে সমস্ত লাইব্রেরি এবং ডিপেনডেন্সি শনাক্ত করে। পরবর্তী সময়ে, Ivy এই লাইব্রেরিগুলির জন্য সঠিক সংস্করণ খুঁজে বের করতে ব্যবহার করা কৌশল অনুযায়ী রেজোলিউশন প্রক্রিয়া শুরু করে। যদি একাধিক ডিপেনডেন্সি একই লাইব্রেরির বিভিন্ন ভার্সন ব্যবহার করে, তবে Ivy তখন resolve strategy
এর উপর ভিত্তি করে সেই কনফ্লিক্ট সমাধান করে।
ধরা যাক, আপনার প্রোজেক্টে দুটি লাইব্রেরি রয়েছে, যেখানে এক লাইব্রেরি commons-io-2.8.0
এবং অন্যটি commons-io-2.6.0
ব্যবহার করছে। আপনি যদি সর্বশেষ সংস্করণ (যেমন 2.8.0
) ব্যবহার করতে চান, তাহলে আপনি কনফ্লিক্ট রেজোলিউশন কৌশল হিসাবে latest
ব্যবহার করতে পারেন।
<ivy-module version="2.0">
<info organisation="com.example" module="myapp" revision="1.0.0"/>
<dependencies>
<dependency org="org.apache.commons" name="commons-io" rev="2.8.0"/>
<dependency org="org.apache.commons" name="commons-io" rev="2.6.0"/>
</dependencies>
</ivy-module>
<ivysettings>
<conflict-management>
<resolve strategy="latest"/>
</conflict-management>
</ivysettings>
এখানে Ivy সর্বশেষ সংস্করণ 2.8.0
ব্যবহার করবে এবং 2.6.0
সংস্করণটি উপেক্ষা করবে।
Ivy Conflict Resolution কৌশল আপনাকে ডিপেনডেন্সি কনফ্লিক্ট সমাধান করতে সহায়তা করে। latest
, first
, replace
, merge
ইত্যাদি কৌশলগুলি ব্যবহার করে Ivy ডিপেনডেন্সির সংস্করণ কনফ্লিক্ট সমাধান করতে পারে। ivysettings.xml ফাইলে কনফ্লিক্ট রেজোলিউশনের কৌশল নির্ধারণ করা যায় এবং এই কৌশলগুলির মাধ্যমে আপনি আপনার প্রোজেক্টে সঠিক ডিপেনডেন্সি ব্যবহার নিশ্চিত করতে পারবেন। Ivy কনফ্লিক্ট ম্যানেজমেন্ট সহজ এবং কার্যকরভাবে ডিপেনডেন্সি রেজোলিউশন পরিচালনা করতে সাহায্য করে।
Ivy Dependency Tree হল একটি দৃশ্যমান কাঠামো যা আপনার প্রোজেক্টের সমস্ত ডিপেন্ডেন্সি এবং তাদের ট্রান্সিটিভ (transitive) ডিপেন্ডেন্সিগুলির সম্পর্ক দেখায়। এটি আপনাকে সাহায্য করে আপনার প্রোজেক্টের ডিপেন্ডেন্সির কাঠামো বোঝার জন্য এবং নির্দিষ্ট ডিপেন্ডেন্সি বা লাইব্রেরি কোথা থেকে এসেছে তা ট্র্যাক করার জন্য।
Ivy Dependency Tree মূলত একটি টুল যা লাইব্রেরি এবং তাদের নির্ভরশীলতার চেইন বা হায়ারারকি তুলে ধরে, যেন আপনি সহজে বুঝতে পারেন কোন লাইব্রেরি অন্য কোন লাইব্রেরির উপর নির্ভরশীল এবং সেই লাইব্রেরির সংস্করণ কী।
ডিপেন্ডেন্সি ট্রি সাধারণত নিম্নলিখিত ধারণা সমূহের উপর কাজ করে:
এটা সাহায্য করে ডিপেন্ডেন্সি কনফ্লিক্ট এবং ভার্সন সলভিংও বুঝতে এবং সমাধান করতে।
Ivy আপনার প্রোজেক্টের ivy.xml ফাইল থেকে ডিপেন্ডেন্সি রেজলভ করে এবং একে একে তাদের ট্রান্সিটিভ ডিপেন্ডেন্সি রেজলভ করে। আপনি Ivy কে নির্দেশ দিতে পারেন যে এটি ডিপেন্ডেন্সি ট্রী বের করে দেখাবে।
Ivy ডিপেন্ডেন্সি ট্রী দেখতে বিভিন্ন কমান্ডের মাধ্যমে গ্রাফিকাল বা টেক্সট আউটপুটে দেখাতে পারে। এই আউটপুটে আপনি দেখতে পাবেন প্রতিটি ডিপেন্ডেন্সি এবং তাদের সম্পর্ক।
Ivy-এর dependency tree দেখতে আপনাকে Ivy টাস্ক ব্যবহার করে টেক্সট আউটপুটে ডিপেন্ডেন্সির কাঠামো দেখতে হবে। এটি সাধারণত Ant স্ক্রিপ্টের মাধ্যমে করা হয়।
ivy.xml ফাইল তৈরি করুন যেখানে আপনি সরাসরি ডিপেন্ডেন্সি নির্ধারণ করবেন:
<ivy-module version="2.0">
<info organisation="com.example" module="my-app" />
<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>
এখানে:
<project name="IvyExample" default="dependency-tree" basedir=".">
<taskdef name="ivy" classname="org.apache.ivy.ant.IvyTask"/>
<target name="dependency-tree">
<ivy:retrieve/>
<ivy:report type="tree"/>
</target>
</project>
এখানে:
<ivy:report type="tree"/>
টাস্কটি Ivy-এর dependency tree আউটপুট তৈরি করবে।<ivy:retrieve/>
টাস্কটি ডিপেন্ডেন্সি ডাউনলোড করবে।এখন, Ant স্ক্রিপ্টটি চালালে আপনি dependency tree দেখতে পারবেন:
ant dependency-tree
এটি Ivy এর ডিপেন্ডেন্সি ট্রী আউটপুট দেবে, যেখানে আপনার সরাসরি এবং ট্রান্সিটিভ ডিপেন্ডেন্সি গুলি সম্পর্ক সহ প্রদর্শিত হবে।
[ivy] :: resolving dependencies :: com.example#my-app;1.0.0
[ivy] confs: [default]
[ivy] found commons-lang3#commons-lang3;3.12.0 in central
[ivy] found junit#junit;4.13.1 in central
[ivy] resolved commons-lang3-3.12.0
[ivy] resolved junit-4.13.1
[ivy] commons-lang3-3.12.0
[ivy] -> commons-logging-1.2
[ivy] -> commons-collections-3.2.1
[ivy] junit-4.13.1
এখানে:
Ivy টাস্কে report type অপশন ব্যবহার করে আপনি বিভিন্ন ধরনের রিপোর্ট তৈরি করতে পারেন, যেমন:
<ivy:report type="html"/>
এটি HTML ফরম্যাটে ডিপেন্ডেন্সি রিপোর্ট তৈরি করবে।
Ivy Dependency Tree টুলটি Ivy ব্যবহারকারীদের জন্য একটি শক্তিশালী উপকারিতা। এটি ডিপেন্ডেন্সি এবং তাদের সম্পর্ক বিশ্লেষণ করতে সাহায্য করে। Ivy-এর dependency tree কমান্ডের মাধ্যমে আপনি আপনার প্রোজেক্টের ডিপেন্ডেন্সির কাঠামো দেখতে পারবেন, এবং তার ট্রান্সিটিভ ডিপেন্ডেন্সি এবং ভার্সন কনফ্লিক্ট সহজে চিহ্নিত করতে পারবেন। এটি প্রোজেক্টের ডিপেন্ডেন্সি ম্যানেজমেন্ট এবং বিল্ড প্রক্রিয়া আরো পরিষ্কার এবং দক্ষ করে তোলে।
Apache Ivy একটি শক্তিশালী ডিপেনডেন্সি ম্যানেজমেন্ট টুল, যা Java প্রোজেক্টে লাইব্রেরি এবং ডিপেনডেন্সি রেজলভ করতে সহায়তা করে। Dependency Version Compatibility Management Ivy-তে অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি নিশ্চিত করে যে আপনার প্রোজেক্টের জন্য উপযুক্ত ডিপেনডেন্সি ভার্সন সঠিকভাবে নির্বাচিত হয়েছে এবং কোন ভার্সন কনফ্লিক্ট বা সমস্যা নেই।
ডিপেনডেন্সি ভার্সন কনফ্লিক্ট সাধারনত তখন ঘটে যখন একাধিক লাইব্রেরি একে অপরের উপর নির্ভরশীল হয় এবং তাদের মধ্যে ভার্সন সামঞ্জস্যতা না থাকার কারণে সমস্যার সৃষ্টি হয়। Ivy ডিপেনডেন্সি ভার্সন কনফ্লিক্ট এবং কনফিগারেশনের সমস্যাগুলি পরিচালনা করার জন্য বিভিন্ন বৈশিষ্ট্য সরবরাহ করে, যার মাধ্যমে আপনি এই সমস্যাগুলি সমাধান করতে পারেন।
Ivy বিভিন্ন উপায়ে ভার্সন কনফ্লিক্ট এবং ভার্সন ম্যানেজমেন্টে সহায়তা করে। এর মধ্যে রয়েছে:
এখানে আমরা দেখব কিভাবে Ivy-তে ভার্সন কনফ্লিক্ট ম্যানেজমেন্ট করা যায় এবং ডিপেনডেন্সি ভার্সন নির্ধারণ করা যায়।
Ivy-তে dynamic versioning এর মাধ্যমে আপনি ভার্সন রেঞ্জ ব্যবহার করে সর্বশেষ ভার্সন বা একটি নির্দিষ্ট ভার্সনের মধ্যে গতি নির্ধারণ করতে পারেন।
<ivy-module version="2.0">
<info organisation="com.example" module="myapp" revision="1.0"/>
<dependencies>
<!-- Use the latest version of the spring-core library between 5.3.0 and 5.4.0 -->
<dependency org="org.springframework" name="spring-core" rev="[5.3.0,5.4.0)"/>
</dependencies>
</ivy-module>
এখানে:
rev="[5.3.0,5.4.0)"
: Ivy ৫.৩.০ এবং ৫.৪.০ এর মধ্যে সর্বশেষ ভার্সন ব্যবহার করবে।Ivy এর মাধ্যমে আপনি কনফ্লিক্ট রেজলভেশন কৌশল কাস্টমাইজ করতে পারেন, যাতে আপনি নির্দিষ্ট কোন কৌশল অনুসরণ করে ভার্সন কনফ্লিক্ট সমাধান করতে পারেন। আপনি latest, fail, বা default কৌশল ব্যবহার করতে পারেন।
<ivy-module version="2.0">
<info organisation="com.example" module="myapp" revision="1.0"/>
<dependencies>
<!-- Resolve conflicts by picking the latest version -->
<dependency org="org.apache.commons" name="commons-lang3" rev="3.0.0,latest"/>
</dependencies>
</ivy-module>
এখানে:
rev="3.0.0,latest"
: এটি commons-lang3 লাইব্রেরির ৩.০.০ ভার্সন থেকে সর্বশেষ ভার্সন পর্যন্ত নির্বাচন করবে।Ivy-তে আপনি exclude
ট্যাগ ব্যবহার করে নির্দিষ্ট ডিপেনডেন্সি বা তাদের নির্দিষ্ট ভার্সন বাদ দিতে পারেন, যা আপনার প্রোজেক্টের জন্য অপ্রয়োজনীয় হতে পারে।
<ivy-module version="2.0">
<info organisation="com.example" module="myapp" revision="1.0"/>
<dependencies>
<!-- Exclude commons-logging from spring-core -->
<dependency org="org.springframework" name="spring-core" rev="5.3.10">
<exclude org="commons-logging" module="commons-logging"/>
</dependency>
</dependencies>
</ivy-module>
এখানে:
<exclude org="commons-logging" module="commons-logging"/>
ট্যাগটি spring-core থেকে commons-logging লাইব্রেরি বাদ দেবে।Ivy-তে strict versioning ব্যবহার করে আপনি নির্দিষ্ট ডিপেনডেন্সির জন্য নির্দিষ্ট ভার্সন ব্যবহার করতে পারেন। এটি শুধুমাত্র নির্দিষ্ট ভার্সনই গ্রহণ করবে এবং অন্যান্য ভার্সন রেজলভ করবে না।
<ivy-module version="2.0">
<info organisation="com.example" module="myapp" revision="1.0"/>
<dependencies>
<!-- Use strict versioning to enforce version 5.3.10 for spring-core -->
<dependency org="org.springframework" name="spring-core" rev="5.3.10"/>
</dependencies>
</ivy-module>
এখানে:
rev="5.3.10"
: Ivy ৫.৩.১০ ভার্সন ছাড়া অন্য কোনো ভার্সন রেজলভ করবে না।Apache Ivy ডিপেনডেন্সি ভার্সন কনফ্লিক্ট এবং কনফিগারেশন ম্যানেজমেন্টের জন্য বিভিন্ন শক্তিশালী ফিচার সরবরাহ করে। Dynamic Versioning, Conflict Resolution, Exclusion, এবং Strict Versioning এর মাধ্যমে আপনি আপনার প্রোজেক্টের ডিপেনডেন্সি কনফ্লিক্ট সমাধান এবং ভার্সন ম্যানেজমেন্ট কার্যকরভাবে পরিচালনা করতে পারেন। Ivy এর এই ফিচারগুলি আপনার প্রোজেক্টের ডিপেনডেন্সি ব্যবস্থাপনা আরও শক্তিশালী এবং নির্ভরযোগ্য করে তোলে।
common.read_more