বিল্ড ইন লাইব্রেরি নিয়ে ত্যানা পেঁচানোঃ তোমরা নিশ্চয়ই সি দিয়ে স্ট্রিং এর ভিবিন্ন অপারেশন করেছো। স্ট্রিং কম্পেয়ার করা, স্ট্রিং এর লেন্থ বের করা, একটা স্ট্রিং এর মধ্যে কয়টা ওয়ার্ড আছে তা কাউন্ট করা মনে আছে? আবার দুইটা নাম্বারের মধ্যে কোনটা ছোট কোনটা বড়, দুইটা ভেরিয়েবলের মধ্যে সোয়াপ করা, স্কয়ার রুট বের করা! এসব কাজ কিন্তু তোমার সি প্রোগ্রামিং ভিতর অলরেডি করা আছে। যেখানে এই জিনিসগুলো করা থাকে সেগুলোকে বলা হয় লাইব্রেরি। যেমন, স্ট্রিং সমস্ত অপারেশনের জন্য <string> নামের একটা লাইব্রেরি আছে, ম্যাথের সমস্ত অপারেশন করার জন্য <math.h> নামক একটা লাইব্রেরি আছে। এসব লাইব্রেরির ভিতরে অসংখ্য ফাংশন লেখা আছে আমরা সেই ফাংশনগুলোকে দিয়ে কাজ করানোর জন্য সেই ফাংশনগুলোর নাম ধরে কল করলেই পেয়ে যাবো। তার আগে যেটা করতে হয় তা হলো সেই লাইব্রেরি আগে আমার প্রজেক্টে ইঙ্কলুড করে নিতে হবে। যেমন, স্ট্রিং এর জন্য #include <string>, ম্যাথের জন্য #include <math.h> এরকম অসংখ্য লাইব্রেরি আছে সি প্রোগ্রামিং ল্যাঙ্গুয়েজে। যা দিয়ে আমরা অনেক কাজ দ্রুত শেষ করে ফেলতে পারি। দুইটা নাম্বারকে সোয়াপ করার জন্য swap(number1, number2), স্কয়ার রুট বের করার জন্য sqrt(number), স্ট্রিং এর লেন্থ বের করার জন্য strlength(myString[]) এরকম আরো অনেক।
নতুন যারা ডেভেলপমেন্ট শুরু করে বিশেষ করে এন্ড্রয়েড বা জাভা রিলেটেড কোন প্রজেক্টে কাজ করে তাদের প্রথমেই একটা যায়গায় হোঁচট খেতে হয়। সেটা হলো ম্যাভেন/গ্রাডল। এই জিনিসগুলোর উপর নবীনরা এতটাই বিরক্ত যে এটার নাম শুনলেই তারা ভয় পায়। আসলে ব্যপারটা ভয় পাওয়ার কিছু না। আমাদের কাজগুলোকে সহজ করার জন্যই এদের উৎপত্তি। যাইহোক মুল কথায় আসি।
মনে করো, তুমি একটা এন্ড্রয়েড অ্যাপ বানাবা যেখানে ম্যাপ থাকবে। এখানে ম্যাপে মুলত তোমার যে কাজটা বের করতে হবে তা হলো নিয়ারবাই লোকেশন বের করা, এক যায়গায় থেকে অন্য যায়গার দুরত্ব বের করা এরকম অনেক ধরনের ম্যাপ রিলেটেড অপারেশন। কিন্তু তার জন্য তো ম্যাপের দরকার হবে। এক্ষেত্রে তোমার হাতে দুইটা অপশন এক, তোমাকে ম্যাপ তৈরী করা আর দুই, অলরেডী তৈরী করা ম্যাপটা নিয়ে আসা। যেহেতু অলরেডি সেটা তৈরী করা আছে সেটা আবার তৈরী করার কোন মানে নাই। এজন্য যা লাগবে তা হলো ম্যাপের লাইব্রেরিটা প্রজেক্টে নিয়ে আসা। এজন্য তোমাকে যেটা করতে হবে তা হলো ম্যাপের লাইব্রেরিটা ডাউনলোড করে তা প্রজেক্টে যুক্ত করা। এখানে অনেক ঝামেলা পোহাতে হবে তোমাকে। প্রথমত, প্রজেক্টের কোন ফোল্ডারে রাখবা সেটা নিয়ে কনফিউশন, দ্বিতীয়ত, কোন রকমে যদি ভার্সন পরিবর্তিত হয় তাহলে এই লাইব্রেরি রিমুভ করে নতুন ভার্সন যুক্ত করা যা অতিরিক্ত ঝামেলা। এমন যদি হতো কেউ একজনকে জাস্ট কমান্ড দিয়ে দিবো সে নিজ থেকেই এসব কিছু ম্যানেজ করে নিবে। ব্যাপারটা আরো সুন্দর হয়না? তোমাকে বাড়তি কোন ঝামেলায় পড়তে হচ্ছেনা। এই কাজটাই আসলে করে ম্যাভেন বা গ্রাডল। এদের প্রত্যেকেরই আলাদা আলাদা স্ট্রাকচার আছে। গ্র্যাডলের ক্ষেত্রে ব্যপারটা এরকম-
এই জিনিসটাই গ্র্যাডল ফাইলে লিখলে ম্যাপের জন্য যা যা লাইব্রেরি প্রয়োজন তা সে ডাউনলোড করে নিবে। আর ভার্সন চেঞ্জ হলে ভার্সনের নাম্বার বলে দিলেই কাজ শেষ। সে তার মত করে ডাউনলোড করে নিবে। এরকম ভিবিন্ন ফ্রেমওয়ার্কের জন্য ভিবিন্ন ডিফেন্ডেন্সি ম্যানেজমেন্ট সিস্টেম আছে। যেমন, স্প্রিং এর জন্য ম্যাভেন।
আশাকরি ম্যাভেন/গ্র্যাডল নিয়ে কনফিউশনগুলো ক্লিয়ার হয়ে গেছে।
নতুন যারা ডেভেলপমেন্ট শুরু করে বিশেষ করে এন্ড্রয়েড বা জাভা রিলেটেড কোন প্রজেক্টে কাজ করে তাদের প্রথমেই একটা যায়গায় হোঁচট খেতে হয়। সেটা হলো ম্যাভেন/গ্রাডল। এই জিনিসগুলোর উপর নবীনরা এতটাই বিরক্ত যে এটার নাম শুনলেই তারা ভয় পায়। আসলে ব্যপারটা ভয় পাওয়ার কিছু না। আমাদের কাজগুলোকে সহজ করার জন্যই এদের উৎপত্তি। যাইহোক মুল কথায় আসি।
মনে করো, তুমি একটা এন্ড্রয়েড অ্যাপ বানাবা যেখানে ম্যাপ থাকবে। এখানে ম্যাপে মুলত তোমার যে কাজটা বের করতে হবে তা হলো নিয়ারবাই লোকেশন বের করা, এক যায়গায় থেকে অন্য যায়গার দুরত্ব বের করা এরকম অনেক ধরনের ম্যাপ রিলেটেড অপারেশন। কিন্তু তার জন্য তো ম্যাপের দরকার হবে। এক্ষেত্রে তোমার হাতে দুইটা অপশন এক, তোমাকে ম্যাপ তৈরী করা আর দুই, অলরেডী তৈরী করা ম্যাপটা নিয়ে আসা। যেহেতু অলরেডি সেটা তৈরী করা আছে সেটা আবার তৈরী করার কোন মানে নাই। এজন্য যা লাগবে তা হলো ম্যাপের লাইব্রেরিটা প্রজেক্টে নিয়ে আসা। এজন্য তোমাকে যেটা করতে হবে তা হলো ম্যাপের লাইব্রেরিটা ডাউনলোড করে তা প্রজেক্টে যুক্ত করা। এখানে অনেক ঝামেলা পোহাতে হবে তোমাকে। প্রথমত, প্রজেক্টের কোন ফোল্ডারে রাখবা সেটা নিয়ে কনফিউশন, দ্বিতীয়ত, কোন রকমে যদি ভার্সন পরিবর্তিত হয় তাহলে এই লাইব্রেরি রিমুভ করে নতুন ভার্সন যুক্ত করা যা অতিরিক্ত ঝামেলা। এমন যদি হতো কেউ একজনকে জাস্ট কমান্ড দিয়ে দিবো সে নিজ থেকেই এসব কিছু ম্যানেজ করে নিবে। ব্যাপারটা আরো সুন্দর হয়না? তোমাকে বাড়তি কোন ঝামেলায় পড়তে হচ্ছেনা। এই কাজটাই আসলে করে ম্যাভেন বা গ্রাডল। এদের প্রত্যেকেরই আলাদা আলাদা স্ট্রাকচার আছে। গ্র্যাডলের ক্ষেত্রে ব্যপারটা এরকম-
dependencies {
compile 'com.google.maps.android:android-maps-utils:0.5+'
}
এই জিনিসটাই গ্র্যাডল ফাইলে লিখলে ম্যাপের জন্য যা যা লাইব্রেরি প্রয়োজন তা সে ডাউনলোড করে নিবে। আর ভার্সন চেঞ্জ হলে ভার্সনের নাম্বার বলে দিলেই কাজ শেষ। সে তার মত করে ডাউনলোড করে নিবে। এরকম ভিবিন্ন ফ্রেমওয়ার্কের জন্য ভিবিন্ন ডিফেন্ডেন্সি ম্যানেজমেন্ট সিস্টেম আছে। যেমন, স্প্রিং এর জন্য ম্যাভেন।
আশাকরি ম্যাভেন/গ্র্যাডল নিয়ে কনফিউশনগুলো ক্লিয়ার হয়ে গেছে।