আমি সফলভাবে glaforge/gemini-interactions-api-sdk রিপোজিটরিটি স্যান্ডবক্স এনভায়রনমেন্টে ক্লোন করেছি এবং এর কোডবেস, প্রজেক্ট লেআউট ও কনফিগারেশন ফাইলগুলো পরিদর্শন করেছি।
নিচে pom.xml ফাইলের কাঠামোর উপর একজন আর্কিটেক্টের বিশ্লেষণ ও বিশদ বিবরণ দেওয়া হলো, যার মধ্যে অন্তর্ভুক্ত রয়েছে এটি কীভাবে প্রকল্পের বিল্ড, টেস্টিং, প্যাকেজিং এবং CI/CD রিলিজ লাইফসাইকেলকে সমর্থন করে।
প্রকল্পটি গুগল জেমিনি ইন্টারঅ্যাকশনস এপিআই (Google Gemini Interactions API)- এর সাথে ইন্টারফেস করার জন্য ডিজাইন করা একটি আধুনিক জাভা লাইব্রেরি হিসেবে গঠিত। এটি জাভা ২১ (এলটিএস) (Java 21 (LTS)) -কে টার্গেট করে এবং একটি অত্যন্ত পরিশীলিত, প্রোফাইল-চালিত মেভেন কনফিগারেশন প্রদর্শন করে, যা কোর কম্পাইলেশন থেকে শুরু করে সাইনিং, মেভেন সেন্ট্রালে স্বয়ংক্রিয় পাবলিশিং এবং গুগল ক্লাউড রানে সার্ভারলেস ডেপ্লয়মেন্টের জন্য একটি পরীক্ষামূলক ফ্রন্টএন্ড প্যাকেজিং পর্যন্ত সবকিছু পরিচালনা করে।
১. প্রকল্পের স্থানাঙ্ক ও মেটাডেটা
ফাইলের শীর্ষে, মৌলিক মেভেন প্রোজেক্ট মেটাডেটা এবং স্থানাঙ্ক সংজ্ঞায়িত করা হয়:
<groupId>io.github.glaforge</groupId>
<artifactId>gemini-interactions-api-sdk</artifactId>
<version>0.10.2-SNAPSHOT</version>
<name>Gemini Interactions API SDK</name>
<description>Google Gemini Interactions API SDK</description>
- টার্গেট জেডিকে: এই প্রোপার্টিগুলো জাভা ২১- এর সোর্স এবং টার্গেট কম্প্যাটিবিলিটি নির্দিষ্ট করে, যা আধুনিক জাভা ফিচারগুলো (রেকর্ড, প্যাটার্ন ম্যাচিং, ভার্চুয়াল থ্রেড ইত্যাদি) সক্ষম করে:
xml <properties> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> - কৃতিত্ব: এতে অ্যাপাচি লাইসেন্স ২.০ উল্লেখ করা হয়েছে এবং প্রকল্পটির কৃতিত্ব ডেভেলপার গুইলাম লাফোর্জ (
glaforge)-কে দেওয়া হয়েছে।
২. নির্ভরশীলতা এবং নির্ভরশীলতা ব্যবস্থাপনা
নির্ভরতা নির্বাচন একটি অত্যন্ত দূরদর্শী স্ট্যাকের প্রতিফলন ঘটায়, যেখানে জনপ্রিয় লাইব্রেরিগুলোর পরবর্তী প্রজন্মের সংস্করণগুলোকে বেছে নেওয়া হয়েছে:
এ. কোর ডিপেন্ডেন্সি এবং জ্যাকসন ৩.এক্স মাইগ্রেশন
এসডিকেটি JSON প্রক্রিয়াকরণের জন্য জ্যাকসন 3.0.0 ব্যবহার করে। ```xml
* **Architectural Note:** Jackson is undergoing a major package rename for version 3.x, changing its Maven group ID from tools.jackson- to পরিবর্তিত হচ্ছে . This POM imports the jackson-bom (Bill of Materials) version ৩.০.০ ইম্পোর্ট করে and utilizes the new , যা SDK-টিকে অত্যন্ত হালকা এবং সময়ের চেয়ে এগিয়ে রাখে।
খ. পরীক্ষণ এবং উপযোগিতা নির্ভরতা
<scope>test</scope> এর অধীনে, প্রজেক্টটি ভ্যালিডেশন এবং মক সার্ভারের জন্য টুল ব্যবহার করে: ১. JUnit 6: xml <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>6.0.2</version> <scope>test</scope> </dependency> ইউনিট এবং ইন্টিগ্রেশন টেস্টিংয়ের জন্য অত্যাধুনিক JUnit 6.0.2 ব্যবহার করে। ২. MockWebServer: xml <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>mockwebserver</artifactId> <version>4.12.0</version> <scope>test</scope> </dependency> লোকাল ইন্টিগ্রেশন টেস্টিংয়ের সময় Gemini API থেকে HTTP রেসপন্স মক করতে ব্যবহৃত হয়। ৩. জাভেলিট: xml <dependency> <groupId>io.javelit</groupId> <artifactId>javelit</artifactId> <version>0.86.0</version> <scope>test</scope> </dependency> একটি মার্জিত, হালকা ফ্রেমওয়ার্ক যা বিশেষভাবে টেস্ট ফোল্ডারে SDK-এর সাথে ইন্টারঅ্যাক্ট করার জন্য একটি ওয়েব-ভিত্তিক UI ("রিসার্চ ফ্রন্টএন্ড") তৈরি করতে ব্যবহৃত হয়।
৩. প্রোফাইল: প্রোফাইল-চালিত জীবনচক্র স্থাপত্য
এই pom.xml এর মূল শক্তি এর চারটি Maven প্রোফাইলের মধ্যে নিহিত। প্রতিটি প্রোফাইল একটি নির্দিষ্ট আর্কিটেকচারাল পর্যায়ের জন্য কাজ করে:
প্রোফাইল ১: deployment
সম্পূর্ণ এপিআই ডকুমেন্টেশন এবং সোর্স সহ স্ট্যান্ডার্ড এসডিকে রিলিজ প্যাকেজ করার জন্য ডিজাইন করা হয়েছে। * স্টেজিং এরিয়া: <altDeploymentRepository> ব্যবহার করে target/staging-deploy এ একটি স্থানীয় স্টেজিং ডিরেক্টরি কনফিগার করে। * প্লাগইন: * maven-javadoc-plugin (v3.5.0): জাভাডকস প্যাকেজ করে। * maven-source-plugin (v3.3.0): মূল জাভা সোর্স ফাইলগুলো প্যাকেজ করে।
প্রোফাইল ২: publication
এই প্রোফাইলটি লাইব্রেরিটিকে পাবলিক রেজিস্ট্রিগুলিতে রিলিজ করার জন্য নিবেদিত এবং এটি প্রচলিত ভারী মেভেন রিলিজ পদ্ধতির পরিবর্তে JReleaser (v1.22.0) ব্যবহার করে। * গিটহাব রিলিজ: কনভেনশনাল কমিটের উপর ভিত্তি করে সুন্দর, স্বয়ংক্রিয় চেঞ্জলগ তৈরি করে, প্রয়োজনে বিদ্যমান রিলিজগুলিকে ওভাররাইড করে। * পিজিপি সাইনিং: পিজিপি-র মাধ্যমে সমস্ত রিলিজ আর্টিফ্যাক্ট স্বয়ংক্রিয়ভাবে সাইন করার জন্য কনফিগার করা হয়েছে ( <armored>true</armored> )। * মেভেন সেন্ট্রাল ডিপ্লয়মেন্ট: সাইন করা আর্টিফ্যাক্টগুলিকে সরাসরি target/staging-deploy ডিরেক্টরি থেকে সোনোটাইপ সেন্ট্রালে ( https://central.sonatype.com/api/v1/publisher ) ডিপ্লয় করে।
প্রোফাইল ৩: release
রিলিজ ফ্লো-এর অর্কেস্ট্রেটর হিসেবে কাজ করে, গিট টাস্কগুলো স্বয়ংক্রিয় করতে maven-release-plugin (v3.3.1) কনফিগার করে: * অটোমেশন ধাপসমূহ: * একটি clean verify ভেরিফিকেশন চালায়। * ভার্সন আপডেট করে, পরিবর্তনগুলো কমিট করে, এবং chore: Releasing version... ` কমিট মেসেজ কনভেনশন ব্যবহার করে রিপোজিটরি ট্যাগ করে ( v@{project.version} )। * deploy jreleaser:full-release with -DskipTests চালিয়ে রিলিজ ট্রিগার করে, যা deployment এবং publication উভয় প্রোফাইল সক্রিয় করে।
প্রোফাইল ৪: deploy-frontend
একটি উদ্ভাবনী প্রোফাইল যা একটি অনন্য চ্যালেঞ্জের সমাধান করে: একটি ওয়েব-ভিত্তিক, পরীক্ষামূলক টেস্ট ক্লাস ( src/test/java তে অবস্থিত ResearchFrontend.java ) প্যাকেজ করা এবং এটিকে একটি সার্ভারলেস কন্টেইনার হিসেবে প্রোডাকশনে ডেপ্লয় করা। * অ্যাসেম্বলি প্লাগইন: মেইন ক্লাস, টেস্ট ক্লাস এবং সমস্ত টেস্ট-স্কোপড ডিপেন্ডেন্সি (Javelit এবং OkHttp সহ) একটি একক রানযোগ্য Uber-JAR-এ একীভূত করতে src/assembly/frontend-deployment.xml নামক একটি কাস্টম ডেসক্রিপ্টরের সাথে maven-assembly maven-assembly-plugin (v3.6.0) ব্যবহার করে। * টার্গেট ক্লাস: Main-Class ম্যানিফেস্ট এন্ট্রিকে io.github.glaforge.gemini.interactions.ResearchFrontend এর দিকে নির্দেশ করার জন্য কনফিগার করে। * ডেপ্লয়মেন্ট কনটেক্সট: researcher-deployment.md এ নথিভুক্ত পদ্ধতি অনুযায়ী, এই জেনারেট করা JAR ফাইলটি Dockerfiles-এর প্রয়োজন ছাড়াই Java 25 বেস ইমেজ ( us-central1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/java25 ) ব্যবহার করে সরাসরি Google Cloud Run- এ কপি ও ডেপ্লয় করা হয়।
৪. গিটহাব অ্যাকশনস (CI/CD)-এর সাথে একীকরণ
প্রোফাইলের গঠনটি .github/workflows/ -এ অবস্থিত গিটহাব ওয়ার্কফ্লোগুলোর অনুরূপ:
-
build.yml(CI): পুল রিকোয়েস্ট বাmainব্রাঞ্চে করা কমিটের ক্ষেত্রে./mvnw verifyকমান্ডটি চালায়, যাতে কম্পাইলেশন, টেস্ট এবং ডিপেন্ডেন্সিগুলো সঠিকভাবে সম্পন্ন হয়। -
release.yml(CD): ম্যানুয়ালি ট্রিগার করা হলে (workflow_dispatch), এই ওয়ার্কফ্লোটি চলে:bash ./mvnw -ntp -B -Prelease release:prepare release:performএই কমান্ডটিreleaseপ্রোফাইলের উপর নির্ভর করে, যা পদ্ধতিগতভাবে ভার্সন আপডেট করে, গিট ট্যাগ পুশ করে, জাভাডক ও সোর্স বিল্ড করে, আর্টিফ্যাক্ট সাইন করে, প্রজেক্ট কম্পাইল করে, সোনোটাইপে রিলিজ পুশ করে এবং গিটহাব রিলিজ নোটের খসড়া তৈরি করে।
সারসংক্ষেপ
gemini-interactions-api-sdk এর pom.xml ফাইলটি ডিক্লারেটিভ ডেভঅপ্স -এর একটি চমৎকার উদাহরণ। এটি মূল লাইব্রেরিটিকে অত্যন্ত হালকা রাখে (শুধুমাত্র Jackson 3.x-এর উপর নির্ভর করে), অথচ জটিল প্যাকেজিং, সাইনিং, ডকুমেন্টেশন তৈরি এবং ক্লাউড-নেটিভ ফ্রন্টএন্ড ডেপ্লয়মেন্টের মতো সক্ষমতাগুলোকে পুনঃব্যবহারযোগ্য প্রোফাইলের মধ্যে পরিচ্ছন্নভাবে আবদ্ধ করে।