অ্যাপাচি আইভি (Apache Ivy) একটি শক্তিশালী ডিপেন্ডেন্সি ম্যানেজমেন্ট টুল যা বিশেষভাবে জাভা প্রোজেক্টের ডিপেন্ডেন্সি ম্যানেজমেন্টের জন্য ব্যবহৃত হয়। আইভি বিভিন্ন ধরনের resolvers প্রদান করে যা ডিপেন্ডেন্সি সংগ্রহ এবং রেজোলিউশন প্রক্রিয়া পরিচালনা করতে সহায়তা করে। প্রতিটি রেজলভার ডিপেন্ডেন্সি খুঁজতে বিভিন্ন উৎস (repositories) ব্যবহার করে। এই রেজলভারগুলো কনফিগার করে আপনি ডিপেন্ডেন্সি সংগ্রহের প্রক্রিয়াকে আরও কাস্টমাইজড এবং নিয়ন্ত্রিত করতে পারেন।
আইভির মধ্যে বেশ কিছু বিল্ট-ইন resolvers রয়েছে, যেমন chain resolver, url resolver, filesystem resolver, maven resolver, inline resolver ইত্যাদি। আমরা এখানে বিভিন্ন resolver কনফিগারেশনের উদাহরণ দেখবো, যা আপনার ডিপেন্ডেন্সি সংগ্রহ প্রক্রিয়া আরও কার্যকরী করতে সাহায্য করবে।
Chain Resolver একাধিক রেজলভারের মধ্যে অনুসন্ধান চালায়, একটির পর এক। এটি প্রথমে একটি রেজলভারে ডিপেন্ডেন্সি অনুসন্ধান করে, যদি সেখানে না পাওয়া যায়, তবে পরবর্তী রেজলভারে অনুসন্ধান চালায়। এটি অনেক সময় ব্যবহৃত হয় যখন আপনি একাধিক রিপোজিটরি থেকে ডিপেন্ডেন্সি অনুসন্ধান করতে চান।
<ivy-module version="2.0">
<info organisation="com.example" module="myapp" revision="1.0"/>
<repositories>
<chain name="myChainResolver">
<resolver ref="local-repo"/>
<resolver ref="remote-repo"/>
</chain>
<!-- Local repository -->
<repository name="local-repo" path="path/to/local/repository"/>
<!-- Remote repository -->
<repository name="remote-repo" url="https://repo.maven.apache.org/maven2"/>
</repositories>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.9"/>
</dependencies>
</ivy-module>
এখানে:
myChainResolver
প্রথমে local-repo
তে ডিপেন্ডেন্সি অনুসন্ধান করবে, তারপর যদি না পায়, তবে remote-repo
তে অনুসন্ধান করবে।URL Resolver রিমোট URL থেকে ডিপেন্ডেন্সি সংগ্রহ করতে ব্যবহৃত হয়। এটি একটি নির্দিষ্ট URL থেকে ডিপেন্ডেন্সি ডাউনলোড করে, যেমন Maven Central বা অন্য কোনো পাবলিক বা প্রাইভেট রিপোজিটরি।
<ivy-module version="2.0">
<info organisation="com.example" module="myapp" revision="1.0"/>
<repositories>
<resolver name="url-repo" url="https://repo.maven.apache.org/maven2"/>
</repositories>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.9"/>
</dependencies>
</ivy-module>
এখানে:
https://repo.maven.apache.org/maven2
URL থেকে লাইব্রেরি ডাউনলোড করবে।File System Resolver লোকাল ফাইল সিস্টেম থেকে ডিপেন্ডেন্সি সংগ্রহ করতে ব্যবহৃত হয়। এটি মূলত তখন ব্যবহৃত হয় যখন আপনার ডিপেন্ডেন্সি লোকাল ডিরেক্টরিতে সংরক্ষিত থাকে এবং আপনি সেই ডিরেক্টরি থেকে লাইব্রেরি সংগ্রহ করতে চান।
<ivy-module version="2.0">
<info organisation="com.example" module="myapp" revision="1.0"/>
<repositories>
<resolver name="local-file-repo" type="filesystem" path="file:///path/to/local/repository"/>
</repositories>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.9"/>
</dependencies>
</ivy-module>
এখানে:
file:///path/to/local/repository
থেকে ডিপেন্ডেন্সি খুঁজে বের করবে।Maven Resolver মাভেন রিপোজিটরি থেকে ডিপেন্ডেন্সি সংগ্রহ করতে ব্যবহৃত হয়। এটি Maven Central বা আপনার প্রাইভেট মাভেন রিপোজিটরি থেকে লাইব্রেরি সংগ্রহ করতে সক্ষম।
<ivy-module version="2.0">
<info organisation="com.example" module="myapp" revision="1.0"/>
<repositories>
<resolver name="maven-central" maven="true"/>
</repositories>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.9"/>
</dependencies>
</ivy-module>
এখানে:
Inline Resolver এমন একটি রেজলভার, যা ডিপেন্ডেন্সি সংগ্রহ করার জন্য URL বা File System এর মতো নির্দিষ্ট সোর্স সরাসরি ডিফাইন করার জন্য ব্যবহৃত হয়।
<ivy-module version="2.0">
<info organisation="com.example" module="myapp" revision="1.0"/>
<repositories>
<resolver name="inline-repo" url="https://repo.maven.apache.org/maven2"/>
</repositories>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.9"/>
</dependencies>
</ivy-module>
এখানে:
আপনি বিভিন্ন ধরনের resolvers একত্রিত করে একটি কম্বিনেশন তৈরি করতে পারেন। এর মাধ্যমে আপনি একাধিক উৎস থেকে লাইব্রেরি সংগ্রহ করতে পারবেন। উদাহরণস্বরূপ, আপনি Chain Resolver ব্যবহার করতে পারেন যাতে প্রথমে লোকাল রিপোজিটরি থেকে ডিপেন্ডেন্সি সংগ্রহ করা হয় এবং যদি সেখানে না পাওয়া যায় তবে রিমোট রিপোজিটরি থেকে সংগ্রহ করা হয়।
<ivy-module version="2.0">
<info organisation="com.example" module="myapp" revision="1.0"/>
<repositories>
<chain name="myChainResolver">
<resolver ref="local-file-repo"/>
<resolver ref="maven-central"/>
</chain>
<!-- File system resolver -->
<resolver name="local-file-repo" type="filesystem" path="file:///path/to/local/repository"/>
<!-- Maven Central resolver -->
<resolver name="maven-central" maven="true"/>
</repositories>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.9"/>
</dependencies>
</ivy-module>
এখানে:
Apache Ivy এর Resolvers আপনাকে ডিপেন্ডেন্সি সংগ্রহের জন্য বিভিন্ন উৎস থেকে লাইব্রেরি এবং রিসোর্স খুঁজতে সাহায্য করে। আপনি Chain Resolver, URL Resolver, File System Resolver, Maven Resolver, এবং Inline Resolver এর মতো বিভিন্ন রেজলভার ব্যবহার করে ডিপেন্ডেন্সি ম্যানেজমেন্ট প্রক্রিয়াকে কাস্টমাইজ করতে পারেন। Chain Resolver একাধিক রেজলভারের মধ্যে অনুসন্ধান করে, URL Resolver রিমোট সার্ভার থেকে ডিপেন্ডেন্সি ডাউনলোড করে, File System Resolver লোকাল ফাইল সিস্টেম থেকে লাইব্রেরি সংগ্রহ করে, এবং Maven Resolver মাভেন রিপোজিটরি থেকে ডিপেন্ডেন্সি সরবরাহ করে।