জাভা হল যেখানে কার্সার বনাম ভিএস কোড পছন্দ বিশ্রী দ্রুততম হয়। ল্যাঙ্গুয়েজ সার্ভার, ডিবাগার, ম্যাভেন ইন্টিগ্রেশন এবং টেস্ট রানার সবই আলাদা এক্সটেনশন হিসেবে আসে, এবং টার্গেট করার জন্য দীর্ঘমেয়াদী রানটাইম হল JDK 25। Microsoft-এর নিজস্ব রিলিজ নোটে বলা হয়েছে যে OpenJDK 25-এর বিল্ডে কোনও Microsoft-নির্দিষ্ট পরিবর্তন নেই (Microsoft Learn OpenJDK রিলিজ নোট দেখুন), তাই রানটাইম সহজ অংশ। সম্পাদক ওয়্যারিং হল যেখানে সেটআপগুলি প্রবাহিত হয়।
উভয় সম্পাদক একটি pom.xml খুলতে পারেন, তাই এটি প্রশ্ন নয়। প্রশ্ন হল একই এক্সটেনশন, সেটিংস এবং ডিবাগ কনফিগগুলি প্রতিটিতে একইভাবে আচরণ করে এবং আপনার এআই সহকারী তাদের সাথে কী করে। কার্সার বনাম ভিএস কোড এক্সটেনশন প্যারিটি অডিটে সেই ফাঁকের এক্সটেনশন সাইডের নিজস্ব লেখা আছে। এখানে আমরা জাভাতে থাকি এবং একটি কার্যকরী পরিষেবা তৈরি করি যা উভয় ক্ষেত্রেই একইভাবে চলে, ডিবাগ, পরীক্ষা এবং গেট।
প্রায় 60 মিনিটের বাজেট। আপনি JDK 25-এ একটি স্প্রিং বুট 4.1.2 প্রজেক্ট, উভয় এডিটরই পড়ার প্রতিশ্রুতিবদ্ধ ওয়ার্কস্পেস কনফিগারেশন, একটি গ্যাপ-চেক স্ক্রিপ্ট যা আপনাকে বলে যে একজন সম্পাদক কখন পিছিয়ে পড়েন, প্রতিটি সম্পাদকের জন্য AI নিয়মের সাথে মিলে যায় এবং একটি গেট স্ক্রিপ্ট যা স্থানীয়ভাবে এবং CI-এ চলে।
·
Google · পছন্দের উৎস
Google-এ নতুন প্রযুক্তির গল্প মিস করবেন না
Google অ্যাপে একবার টেক ইনসাইডার যোগ করুন এবং আমাদের গল্পগুলি আপনার সংবাদের পরামর্শগুলিতে প্রদর্শিত হবে৷
এখন যোগ করুন
2026 সালের নভেম্বরে জাভার জন্য কার্সার বনাম VSCode
কার্সার হল একটি এআই কোডিং পণ্য যা ভিএস কোড থেকে প্রাপ্ত একটি সম্পাদকের চারপাশে তৈরি করা হয়েছে এবং সেই বংশের কারণে জাভা সেটআপ উভয়ের মধ্যে একই রকম দেখায়। আপনার .vscode ফোল্ডার, আপনার কীবাইন্ডিং এবং বেশিরভাগ এক্সটেনশন আইডি বহন করে। কে এআই লেয়ার পাঠায়, কীভাবে এক্সটেনশন সোর্স করা হয় এবং সাবস্ক্রিপশন মডেলটি এই মাসে কেমন দেখায় তার মধ্যে পার্থক্য রয়েছে। এর মধ্যে দুটি গত কয়েক সপ্তাহে সরানো হয়েছে, তাই একটি টার্মিনাল স্পর্শ করার আগে এটি একটি সংক্ষিপ্ত সংক্ষিপ্তসারের মূল্য।
VS কোডে কি পরিবর্তন হয়েছে
মাইক্রোসফ্ট 15 অক্টোবর, 2026-এ প্রিভিউতে একটি আধুনিকীকৃত VS কোড UI ঘোষণা করেছে৷ পুরানো ডিজাইনটিকে এখন ক্লাসিক UI বলা হয়, এবং মাইক্রোসফ্ট বলেছে যে এটি অপসারণের তারিখ না দিয়েই এটি অবসর নেওয়ার পরিকল্পনা করছে৷ 28 অক্টোবর দলটি বলেছে যে এজেন্ট হোস্ট প্রোটোকল 1.0 সংস্করণে পৌঁছেছে। GitHub Copilot সম্পাদকের মধ্যে একটি পৃথক সাবস্ক্রিপশন-সমর্থিত পরিষেবা রয়ে গেছে, এবং Copilot Free ব্যবহারকারীরা পরবর্তী-সম্পাদনা পরামর্শগুলি পান। পেইড কপিলট ব্যবহারকারীদের 23 সেপ্টেম্বর থেকে একীভূত ইনলাইন-পরামর্শের অভিজ্ঞতা রয়েছে, যেমন VS কোড টিমের ইনলাইন পরামর্শ লেখার ব্যাখ্যা করে।
এর কোনোটিই জাভা টুলচেনকে স্পর্শ করে না। জাভা এক্সটেনশনগুলি এখনও একইভাবে ইনস্টল করে, এবং ক্লাসিক UI ফলব্যাক মানে একটি থিম বা লেআউট পরিবর্তন আপনার ডিবাগ কনফিগারেশনগুলিকে ভাঙবে না।
কার্সারে কি পরিবর্তন হয়েছে
কার্সার 12 অক্টোবর, 2026-এ X সাবস্ক্রিপশন চালু করেছে, একটি সম্মিলিত পরিকল্পনা যা কার্সার, Grok, Grok বট এবং X প্রিমিয়ামকে কভার করে। প্রিমিয়াম এবং উচ্চতর ক্ষেত্রে, তৃতীয় পক্ষের মডেলগুলি উপলভ্য থাকে তবে খরচের ক্যাপ সহ প্রিপেইড টপ-আপগুলির মাধ্যমে API তালিকার মূল্যে বিল করা হয়। আল্ট্রা স্তর প্রতি মাসে $200 বা বছরে $2,000 এ তালিকাভুক্ত করা হয়েছে। কার্সারের মূল্য নীতি বলছে বর্তমান ফি তার মডেল এবং মূল্য পৃষ্ঠায় লাইভ, তাই আপনি কিছু কেনার আগে সেখানে চেক করুন। এই সপ্তাহে দুটি পণ্য লঞ্চ হয়েছে: 5 নভেম্বর ক্লাউড এজেন্টদের জন্য লাইভ অ্যাপ বিল্ডিং এবং স্থাপনা এবং 6 নভেম্বর এজেন্টদের সাথে রিয়েলটাইম ভয়েস চ্যাট। মডেল বাছাইকারীতে এখন Claude Sonnet 5.5 এবং Claude Opus 5.5, Claude Haiku 5.5 সহ একটি অপ্ট-ইন মডেল অন্তর্ভুক্ত রয়েছে৷
বিলিং পরিবর্তন জাভার জন্য আপনার প্রত্যাশার চেয়ে বেশি গুরুত্বপূর্ণ। একটি এজেন্ট দ্বারা চালিত একটি Maven বিল্ড লুপ পেইড মডেল ব্যবহারের মাধ্যমে দ্রুত জ্বলতে পারে এবং আমরা AI নিয়মের ধাপে ফিরে আসি। আপনি যদি এই অনুশীলনের পাইথন সংস্করণ থেকে আসেন, তাহলে কার্সার বনাম ভিএস কোড পাইথন সেটআপটি ভিন্ন ভাষার সার্ভারের সাথে একই ড্রিফট সমস্যাকে কভার করে।
বিশেষ করে জাভাতে আরও একটি পয়েন্ট। যে ল্যাঙ্গুয়েজ সার্ভারটি আসল কাজ করে, Eclipse JDT Language Server Red Hat এক্সটেনশন দ্বারা মোড়ানো, উভয় এডিটরে একই কোড। সুতরাং আপনি যে পার্থক্যগুলিকে আঘাত করবেন তা হল প্যাকেজিং, লাইসেন্সিং এবং এআই আচরণ, পার্সিং বা রিফ্যাক্টরিং গুণমান নয়। আমাদের চেক করা কার্সার ডক্স এবং রিলিজ নোটগুলি বক্সে জাভা শিপের জন্য Red Hat এক্সটেনশন বা মাইক্রোসফ্টের এক্সটেনশন প্যাক কিনা তা বলে না, তাই এই টিউটোরিয়ালটি কখনই অনুমান করে না। ধাপ 7 আপনার মেশিনে এটির জন্য পরীক্ষা করুন।
আপনি কি তৈরি করবেন এবং সময় বাজেট
প্রকল্পটি স্টক-সার্ভিস নামে একটি ছোট স্টক-লেভেল পরিষেবা। এটি দুটি এন্ডপয়েন্ট উন্মোচিত করে, মেমরিতে স্তর রাখে, স্টককে শূন্যের নিচে ঠেলে এবং ইউনিট পরীক্ষা সহ জাহাজগুলি এমন সমন্বয় প্রত্যাখ্যান করে। এটি ইচ্ছাকৃতভাবে বিরক্তিকর, কারণ পয়েন্টটি এটির চারপাশে সম্পাদক সেটআপ। নীচের প্রতিটি ফাইল একটি সংগ্রহস্থলে যায় যা আপনি VS কোড, কার্সার বা উভয়টিতে খুলতে পারেন।
মিনিট অনুমান একটি উষ্ণ নেটওয়ার্ক এবং একটি ল্যাপটপ যে ইতিমধ্যে গিট আছে. আপনি যদি একটি নতুন মেশিনে শুরু করেন তবে ডাউনলোডের জন্য 10 মিনিট যোগ করুন। উইন্ডোজ পাঠকরা WSL বা Git Bash-এ প্রতিটি স্ক্রিপ্ট চালাতে পারে এবং Java এবং Maven কমান্ডগুলি PowerShell-এ অভিন্ন।
পিন করার পূর্বশর্ত এবং সংস্করণ
আপনি কোডের একটি লাইন লেখার আগে সংস্করণগুলি পিন করুন। জাভা প্রকল্পগুলি অদ্ভুত উপায়ে ব্যর্থ হয় যখন সম্পাদক, শেল এবং বিল্ড টুল প্রতিটি শান্তভাবে একটি আলাদা JDK বাছাই করে এবং এই নিবন্ধে পরে বেশিরভাগ সমস্যা সমাধান সেই একটি সমস্যার দিকে ফিরে আসে।
JDK 25 (LTS)। Oracle JDK 25 কে একটি দীর্ঘমেয়াদী-সাপোর্ট রিলিজ হিসাবে চিহ্নিত করে যা সেপ্টেম্বর 2025 এ পাঠানো হয়েছিল, বাণিজ্যিক প্রিমিয়ার সমর্থন সেপ্টেম্বর 2030 পর্যন্ত পরিকল্পনা করা হয়েছে এবং সেপ্টেম্বর 2033 পর্যন্ত বর্ধিত সমর্থন রয়েছে। Oracle JDK 25 Oracle নো-ফী শর্ত ও শর্তাবলীর অধীনে কোনো মূল্য ছাড়াই উপলব্ধ। যেকোন OpenJDK 25 বিল্ড এই টিউটোরিয়ালের জন্য কাজ করে, তেমুরিন বা মাইক্রোসফটের বিল্ড সহ।
Apache Maven 3.x. Apache Maven ডাউনলোড পৃষ্ঠা অনুসারে, 3.10.0 হল সর্বশেষ প্রস্তাবিত রিলিজ। Maven 4 এখনও রিলিজ-প্রার্থী ফর্মে রয়েছে এবং প্রকল্পটি বলে যে এটি উত্পাদন ব্যবহারের জন্য নিরাপদ নয়, তাই 3.x লাইনে থাকুন।
স্প্রিং বুট 4.1.2. 23 অক্টোবর, 2026 থেকে স্থিতিশীল রক্ষণাবেক্ষণ রিলিজ। স্প্রিং বুট ওপেন সোর্স এবং মাভেন সেন্ট্রাল এর মাধ্যমে বিতরণ করা হয়, তাই পরিকল্পনা করার জন্য কোন লাইসেন্স ফি নেই।
VS কোড এবং কার্সার, প্রতিটির বর্তমান স্থিতিশীল বিল্ড। আমরা ইচ্ছাকৃতভাবে একটি সম্পাদক সংস্করণ নম্বর পিন না, কারণ উভয় তাদের নিজস্ব সময়সূচী আপডেট. ধাপ 3 আপনার কাছে আসলে কী আছে তা আপনি রেকর্ড করেছেন।
বাশ সহ একটি শেল। macOS, Linux, WSL বা Git Bash। এই টিউটোরিয়ালের প্রতিটি স্ক্রিপ্ট প্লেইন ব্যাশ।
git 2.x এবং JDK, Maven রিপোজিটরি ক্যাশে এবং ভাষা সার্ভার সূচীগুলির জন্য প্রায় 2 GB ফ্রি ডিস্ক।
একটি কার্সার অ্যাকাউন্ট ঐচ্ছিক। ধাপ 11 পর্যন্ত সবকিছু অর্থ প্রদান ছাড়াই কাজ করে। ধাপ 12 শুধুমাত্র নিয়ম ফাইল লিখতে বিনামূল্যে স্তর প্রয়োজন, যদিও আপনি যে মডেলগুলিকে কল করতে পারেন তা আপনার পরিকল্পনার উপর নির্ভর করে৷
স্প্রিং টিম ইতিমধ্যেই পরবর্তী ট্রেনের লাইন আপ করছে। স্প্রিং ক্লাউড 2026.0.0-RC2, কোড-নাম প্যাডিংটন, 5 নভেম্বর ঘোষণা করা হয়েছিল এবং স্প্রিং ব্লগ অনুসারে, স্প্রিং বুট 4.2.0-RC2 এর উপর ভিত্তি করে। RC লেবেলযুক্ত যেকোনো কিছুকে একটি শাখা পরীক্ষা হিসাবে বিবেচনা করুন। আপনার এডিটর সেটআপ আপনি কোন বুট সংস্করণ ব্যবহার করেন তা বিবেচনা করবে না, তবে আপনার সতীর্থদের উত্পাদন পরিষেবাগুলি করবে৷
আরও একটি পূর্বশর্ত হল ব্যবহারকারী সেটিংসের জন্য একটি পরিকল্পনা। ভিএস কোড এবং কার্সার আলাদা ব্যবহারকারী-স্তরের সেটিংস ফাইল রাখে এবং জাভা রানটাইম পাথ সেখানে থাকে। কার্সার বনাম ভিএস কোড সেটিংস সিঙ্ক গাইড এই ফাইলগুলিকে মেশিন জুড়ে সারিবদ্ধ রেখে কভার করে। এই টিউটোরিয়ালের জন্য, আমরা ব্যবহারকারীর সেটিংসে মেশিন-নির্দিষ্ট পাথ রাখি এবং ভান্ডারে অন্য সবকিছু রাখি।
ধাপ 1 থেকে 3: JDK 25, Maven এবং উভয় সম্পাদক ইনস্টল করুন
ধাপ 1: JDK 25 ইনস্টল করুন
একটি ইনস্টল রুট বাছুন এবং এটির সাথে লেগে থাকুন। macOS এবং Linux-এ, SDKMAN আপনাকে শেল প্রতি JDK গুলি স্যুইচ করতে দেয়, যদি অন্য কোনও প্রোজেক্টের এখনও পুরানো রিলিজের প্রয়োজন হয় তবে এটি কার্যকর। যা পাওয়া যায় তা তালিকাভুক্ত করুন, তারপর একটি Temurin 25 বিল্ড ইনস্টল করুন।
curl -s "https://get.sdkman.io" | bash উৎস "$HOME/.sdkman/bin/sdkman-init.sh" sdk তালিকা জাভা | grep -i tem sdk java sdk ডিফল্ট জাভা ইনস্টল করুন
প্যাকেজ ম্যানেজাররাও কাজ করে। macOS-এ, brew install --cask temurin@25 টেমুরিন পিপা ইনস্টল করে। উইন্ডোজে, উইনগেট অনুসন্ধান টেমুরিন 25 JDK-এর জন্য সঠিক প্যাকেজ আইডি দেখায়। উবুন্টুতে, openjdk-25-jdk-এর জন্য apt অনুসন্ধান করুন এবং এটি ইনস্টল করুন যদি আপনার রিলিজ এটি বহন করে। তারপর JAVA_HOME রপ্তানি করুন যাতে প্রতিটি টুল সম্মত হয়।
# macOS এবং Linux (~/.zshrc বা ~/.bashrc-এ যোগ করুন) JAVA_HOME="$(dirname "$(dirname "$(readlink -f "$(command -v java)")")")" এক্সপোর্ট PATH="$JAVA_HOME/bin:$PATH" java -version
প্রত্যাশিত আউটপুট একটি 25 বিল্ডের নাম দেয়। আপনার প্যাচ নম্বর এবং বিক্রেতার স্ট্রিং আলাদা হবে।
openjdk ভার্সন "25.0.x" 20xx-xx-xx LTS OpenJDK রানটাইম এনভায়রনমেন্ট টেমুরিন-25.0.x+x (বিল্ড 25.0.x+x-LTS) OpenJDK 64-বিট সার্ভার VM Temurin-25.0.x+x (build+, 25.0.x+x)
ধাপ 2: Maven ইনস্টল করুন এবং এটি JDK 25 ব্যবহার করে তা নিশ্চিত করুন
আপনার প্যাকেজ ম্যানেজার বা Apache ডাউনলোড পৃষ্ঠা থেকে বর্তমান 3.x রিলিজ ইনস্টল করুন, তারপর নিশ্চিত করুন যে Maven আপনি এইমাত্র ইনস্টল করা একই জাভা রিপোর্ট করেছেন। এই একক চেকটি সবচেয়ে সাধারণ জাভা এডিটর বাগ প্রতিরোধ করে, একটি ভাষা সার্ভার যা একটি JDK এর সাথে কম্পাইল করে যখন টার্মিনাল অন্যটির সাথে তৈরি হয়।
mvn -v
Apache Maven 3.xy Maven হোম: /home/you/.sdkman/candidates/maven/current জাভা সংস্করণ: 25.0.x, বিক্রেতা: Eclipse Adoptium, রানটাইম: /home/you/.sdkman/candidates/java/current
যদি জাভা সংস্করণ লাইন 25 ছাড়া অন্য কিছু দেখায়, তাহলে এখনই JAVA_HOME ঠিক করুন। যতক্ষণ না মেলে ততক্ষণ এগোবেন না।
ধাপ 3: উভয় সম্পাদক এবং তাদের শেল কমান্ড ইনস্টল করুন
code.visualstudio.com থেকে VS কোড এবং cursor.com থেকে কার্সার ডাউনলোড করুন, তারপর প্রতিটি সম্পাদকের কমান্ড-লাইন লঞ্চার তার কমান্ড প্যালেট থেকে ইনস্টল করুন। ভিএস কোডে শেল কমান্ড চালান: PATH-এ 'কোড' কমান্ড ইনস্টল করুন। কার্সারে শেল কমান্ড চালান: PATH-এ 'কার্সার' কমান্ড ইনস্টল করুন। উভয় লঞ্চারই পরে গুরুত্বপূর্ণ, কারণ গ্যাপ চেক স্ক্রিপ্ট কোড --লিস্ট-এক্সটেনশন এবং কার্সার --লিস্ট-এক্সটেনশনকে কল করে। দুটি সিএলআই অনেকগুলি পৃষ্ঠ ভাগ করে নেয় কিন্তু পুরোটাই নয়, এবং কার্সার সিএলআই বনাম ভিএস কোড সিএলআই তুলনা দেখায় যে তারা কোথায় বিভক্ত।
কোড --সংস্করণ কার্সার --সংস্করণ
উভয় কমান্ড একটি সংস্করণ স্ট্রিং প্রিন্ট করে। আপনার প্রকল্পের নোটগুলিতে উভয়ই লিখুন। একটি আপডেটের পরে কিছু বিরতি হলে, সেই দুটি লাইন আপনাকে বলে যে কোন সম্পাদক সরানো হয়েছে৷
ধাপ 4 এবং 5: স্প্রিং বুট প্রকল্প তৈরি করুন এবং এটি তৈরি করুন
ধাপ 4: প্রকল্পটি লেখুন এবং পোম লিখুন
আমরা হাতে প্রকল্প লিখি যাতে আপনি প্রতিটি চলমান অংশ দেখতে পারেন। আপনি যদি স্প্রিং ইনিশিয়ালাইজার পছন্দ করেন, জাভা 25 এবং ওয়েব এবং অ্যাকচুয়েটর নির্ভরতার সাথে বুট 4.1.2 এর জন্য একটি Maven প্রকল্প তৈরি করুন, তারপর নীচের ফাইলের সাথে তুলনা করুন। বুট 4 এর স্টার্টারকে আরও সংকীর্ণ মডিউলে বিভক্ত করে, তাই এখানে ওয়েব স্টার্টার হল MVC এক। একটি Boot 3 টিউটোরিয়াল থেকে অনুলিপি করা একটি pom সমাধান হবে না।
mkdir -p স্টক-সার্ভিস && cd স্টক-সার্ভিস mkdir -p src/main/java/dev/techlab/stock src/test/java/dev/techlab/stock src/main/resources mkdir -p .vscode .cursor/rules .github/gscriptsinflows
java.version বৈশিষ্ট্য হল যা স্প্রিং বুট প্যারেন্ট কম্পাইলার রিলিজে পরিণত করে। জাভা ল্যাঙ্গুয়েজ সার্ভার যখন কোন প্রজেক্টের কোন রানটাইম প্রয়োজন তা স্থির করে তখন এটি পড়ে, তাই এটি একটি একক লাইন যা বিল্ড, টার্মিনাল এবং উভয় সম্পাদককে JDK 25 এর সাথে সংযুক্ত করে।
ধাপ 5: পরিষেবা কোড লিখুন এবং প্রথম বিল্ড চালান
তিনটি ছোট ক্লাস এবং একটি কনফিগারেশন ফাইল অ্যাপটি তৈরি করে। পরিষেবাটি একটি সিল করা ফলাফলের প্রকার ব্যবহার করে যাতে নিয়ামক প্যাটার্ন ম্যাচিং ব্যবহার করতে পারে, যা উভয় সম্পাদকের মধ্যে বিশ্লেষণ করার জন্য ভাষা সার্ভারকে বাস্তব কিছু দেয়।
প্যাকেজ dev.techlab.stock; org.springframework.boot.SpringApplication আমদানি করুন; org.springframework.boot.autoconfigure.SpringBootApplication আমদানি করুন; @SpringBootApplication পাবলিক ক্লাস ইনভেন্টরিঅ্যাপ্লিকেশন { পাবলিক স্ট্যাটিক ভ্যাইড মেইন(স্ট্রিং[] আর্গস) { SpringApplication.run(InventoryApplication.class, args); } }
প্যাকেজ dev.techlab.stock; java.util.Map আমদানি করুন; java.util.concurrent.ConcurrentHashMap আমদানি করুন; আমদানি java.util.concurrent.atomic.AtomicReference; org.springframework.stereotype.Service আমদানি করুন; @Service পাবলিক ক্লাস StockService { সর্বজনীন রেকর্ড StockItem(String sku, int quantity) {} সর্বজনীন সিল করা ইন্টারফেস AdjustResult { রেকর্ড আপডেট করা (StockItem আইটেম) AdjustResult প্রয়োগ করে {} রেকর্ড প্রত্যাখ্যান (স্ট্রিং কারণ) AdjustResult প্রয়োগ করে {} } ব্যক্তিগত চূড়ান্ত মানচিত্র (প্রাইভেট ফাইনাল কনকিউরেন্ট> লেভেল) সর্বজনীন স্টকআইটেম খুঁজুন(স্ট্রিং স্কু) { নতুন স্টকআইটেম ফেরত দিন(sku, levels.getOrDefault(sku, 0)); } সর্বজনীন AdjustResult adjust(স্ট্রিং sku, int delta) { var প্রত্যাখ্যান = নতুন AtomicReference(); var next = levels.compute(sku, (key, current) -> { int base = current == null ? 0 : current; if (base + delta < 0) { rejection.set("স্টক শূন্যের নিচে যেতে পারে না " + key); রিটার্ন কারেন্ট; } রিটার্ন বেস + ডেল্টা; }); if (rejection.get() != null) { নতুন AdjustResult.Rejected(rejection.get()) ফেরত দিন; } রিটার্ন নতুন AdjustResult.Updated(নতুন StockItem(sku, next)); } }
প্যাকেজ dev.techlab.stock; java.util.Map আমদানি করুন; org.springframework.http.ResponseEntity আমদানি করুন; org.springframework.web.bind.annotation.GetMapping আমদানি করুন; org.springframework.web.bind.annotation.PathVariable আমদানি করুন; org.springframework.web.bind.annotation.PostMapping আমদানি করুন; org.springframework.web.bind.annotation.RequestBody আমদানি করুন; org.springframework.web.bind.annotation.RequestMapping আমদানি করুন; org.springframework.web.bind.annotation.RestController আমদানি করুন; dev.techlab.stock.StockService.AdjustResult আমদানি করুন; dev.techlab.stock.StockService.StockItem আমদানি করুন; @RestController @RequestMapping("/stock") পাবলিক ক্লাস স্টক কন্ট্রোলার { পাবলিক রেকর্ড AdjustRequest(int delta) {} ব্যক্তিগত চূড়ান্ত স্টকসার্ভিস পরিষেবা; পাবলিক স্টক কন্ট্রোলার(স্টক সার্ভিস সার্ভিস) { this.service = service; } @GetMapping("/{sku}") পাবলিক স্টকআইটেম গেট(@PathVariable স্ট্রিং sku) { return service.find(sku); } @PostMapping("/{sku}/adjust") পাবলিক রেসপন্সএন্টিটি অ্যাডজাস্ট(@PathVariable String sku, @RequestBody AdjustRequest request) { রিটার্ন সুইচ (service.adjust(sku, request.delta())) { case AdjustResult.UpdatedE Updated ->Responsemd); case AdjustResult.Rejected rejected -> ResponseEntity.unprocessableEntity().body(Map.of("error", rejected.reason())); }; } }
spring.application.name=stock-service server.port=8080 management.endpoints.web.exposure.include=স্বাস্থ্য, তথ্য
তিনটি জাভা ফাইল src/main/java/dev/techlab/stock এর অধীনে এবং প্রপার্টি ফাইল src/main/resources/application.properties এর অধীনে সংরক্ষণ করুন। এখন পরীক্ষাগুলি যোগ করুন যাতে প্রথম বিল্ডে প্রমাণ করার কিছু থাকে।
প্যাকেজ dev.techlab.stock; স্ট্যাটিক org.assertj.core.api.Assertions.assertTat আমদানি করুন; org.junit.jupiter.api.Test আমদানি করুন; dev.techlab.stock.StockService.AdjustResult আমদানি করুন; ক্লাস স্টকসার্ভিস টেস্ট { ব্যক্তিগত চূড়ান্ত স্টকসার্ভিস সার্ভিস = নতুন স্টক সার্ভিস(); @Test void unknownSkuStartsAtZero() { assertThat(service.find("A-100").quantity()).isZero(); } @Test void adjustAddsStock() { var ফলাফল = service.adjust("A-100", 25); assertThat(result).isInstanceOf(AdjustResult.Updated.class); assertTat(service.find("A-100").quantity()).isEqualTo(25); } @Test void adjustRejects NegativeStock() { service.adjust("A-100", 5); var ফলাফল = service.adjust("A-100", -6); assertThat(result).isInstanceOf(AdjustResult.Rejected.class); assertTat(service.find("A-100").quantity()).isEqualTo(5); } }
প্যাকেজ dev.techlab.stock; org.junit.jupiter.api.Test আমদানি করুন; org.springframework.boot.test.context.SpringBootTest আমদানি করুন; @SpringBootTest ক্লাস ইনভেন্টরি অ্যাপ্লিকেশন পরীক্ষা { @Test void contextLoads() { } }
mvn -B -ntp যাচাই করুন
যদি বিল্ডটি টার্মিনালে চলে যায়, তাহলে একটি সম্পাদকের পরে যেকোন লাল স্কুইগল একটি সম্পাদকের সমস্যা, কোড সমস্যা নয়। এই পার্থক্য ঘন্টা বাঁচায়। এখনই প্রতিশ্রুতি দিন যাতে আপনার কাছে পার্থক্য করার জন্য একটি পরিষ্কার বেসলাইন থাকে।
ধাপ 6 এবং 7: জাভা এক্সটেনশন ইনস্টল করুন এবং ফাঁক চেক চালান
ধাপ 6: উভয় সম্পাদকে একই এক্সটেনশন সেট ইনস্টল করুন
এক্সটেনশন সেট উভয় সম্পাদকের একই তালিকা। রেড হ্যাট এক্সটেনশন ল্যাঙ্গুয়েজ সার্ভার প্রদান করে, এবং জাভার জন্য মাইক্রোসফটের এক্সটেনশন প্যাক ডিবাগার, টেস্ট রানার, ম্যাভেন সাপোর্ট এবং প্রজেক্ট ম্যানেজারকে বান্ডিল করে। স্প্রিং টুলিং VMware-প্রকাশিত স্প্রিং বুট এক্সটেনশন প্যাক থেকে আসে। ভিজ্যুয়াল স্টুডিও মার্কেটপ্লেসে জাভা তালিকার জন্য এক্সটেনশন প্যাক বিনামূল্যে।
scripts/java-extensions.txt-এ একবার তালিকাটি লিখুন, যাতে ইনস্টলার এবং পরীক্ষক উভয়ই সত্যের একই উৎস পড়ে।
redhat.java vscjava.vscode-java-debug vscjava.vscode-java-test vscjava.vscode-maven vscjava.vscode-java-dependency vmware.vscode-spring-boot
#!/usr/bin/env bash # scripts/install-java-extensions.sh সেট -uo pipefail cd "$(dirname "$0")/.." কোড কার্সারে সম্পাদকের জন্য; যদি করি! কমান্ড -v "$editor" >/dev/null 2>&1; তারপর echo "skip $editor is not on PATH" অবিরত ফাই পড়ার সময় -r ext; করুন [ -z "$ext" ] && চালিয়ে যান যদি "$editor" --install-extension "$ext" --force >/dev/null 2>&1; তারপর printf 'ইন্সটল %-8s %s\n' "$editor" "$ext" অন্য printf 'ফেলড %-8s %s\n' "$editor" "$ext" ফাই হয়ে গেছে < scripts/java-extensions.txt সম্পন্ন হয়েছে
bash স্ক্রিপ্ট/install-java-extensions.sh দিয়ে এটি চালান। একটি ব্যর্থ লাইন স্ক্রিপ্টে একটি বাগ নয়৷ এই পুরো টিউটোরিয়ালটিতে এটি সবচেয়ে দরকারী সংকেত, কারণ এর মানে হল যে সম্পাদকের রেজিস্ট্রি দ্বারা এক্সটেনশন আইডি আনা যাবে না।
এক্সটেনশন ইনস্টল করা একটি বিশ্বাসের প্রশ্নও উত্থাপন করে। ল্যাঙ্গুয়েজ সার্ভার এবং ডিবাগাররা আপনার ওয়ার্কস্পেস থেকে কোড এক্সিকিউট করে এবং একজন এজেন্ট-চালিত এডিটর তা দ্রুত ট্রিগার করতে পারে। কার্সার বনাম VS কোড ওয়ার্কস্পেস ট্রাস্ট অডিট প্রতিটি সম্পাদক খোলার উপর যা চলে তার মধ্য দিয়ে চলে, যা আপনার লেখা না এমন একটি সংগ্রহস্থলে যেকোন একটিকে নির্দেশ করার আগে পড়ার যোগ্য।
ধাপ 7: ফাঁক চেক লিখুন এবং চালান
মাইক্রোসফ্ট দ্বারা প্রকাশিত কিছু এক্সটেনশন শুধুমাত্র মাইক্রোসফটের নিজস্ব VS কোড বিল্ডের জন্য লাইসেন্সপ্রাপ্ত, এবং Pylance হল সবচেয়ে পরিচিত উদাহরণ। জাভার ছবি কম স্পষ্ট, ঠিক এই কারণেই আমরা অনুমান করার পরিবর্তে পরিমাপ করি। এই স্ক্রিপ্ট প্রতিটি সম্পাদকের ইনস্টল করা এক্সটেনশনকে প্রয়োজনীয় তালিকার সাথে তুলনা করে এবং কিছু অনুপস্থিত থাকলে অ-শূন্য থেকে প্রস্থান করে, তাই এটি পরে CI বা একটি প্রি-কমিট হুক গেট করতে পারে।
#!/usr/bin/env bash # scripts/java-gap-check.sh সেট -uo pipefail cd "$(dirname "$0")/.." status=0 কোড কার্সারে সম্পাদকের জন্য; যদি করি! কমান্ড -v "$editor" >/dev/null 2>&1; তারপর প্রতিধ্বনি করুন "এসকিপ $এডিটর PATH-এ নেই" চালিয়ে যান fi ইনস্টল="$(mktemp)" "$editor" --list-extensions | tr 'AZ' 'az' | sort > "$installed" পড়ার সময় -r ext; do [ -z "$ext" ] && চালিয়ে যান যদি grep -qx "$ext" "$installed"; তারপর printf 'OK %-8s %s\n' "$editor" "$ext" অন্য printf '%-8s %s\n' "$editor" "$ext" স্ট্যাটাস=1 ফাই করা হয়েছে < scripts/java-extensions.txt rm -f "$installed" প্রস্থান করা হয়েছে "$status"
bash স্ক্রিপ্ট/java-gap-check.sh
উপরের নমুনা আউটপুট দৃষ্টান্তমূলক. আপনার দৌড় সিদ্ধান্ত নেয় কোন সারি, যদি থাকে, মিসিং বলে। যখন একটি হয়, তখন আপনার কাছে তিনটি বিকল্প থাকে: সম্পাদক যে রেজিস্ট্রি ব্যবহার করে সেটিতে একটি প্রতিস্থাপন এক্সটেনশন খুঁজুন, কার্সার দিয়ে একটি ডাউনলোড করা VSIX সাইডলোড করুন --install-extension path/to/file.vsix, অথবা ফাঁকটি স্বীকার করুন এবং রিপোজিটরি README-এ নথিভুক্ত করুন যাতে সতীর্থরা জানতে পারে কোন সম্পাদক সম্পূর্ণ অভিজ্ঞতা পায়৷
ধাপ 8 এবং 9: উভয় সম্পাদককে JDK 25 এ নির্দেশ করুন এবং ওয়ার্কস্পেস সেটিংস শেয়ার করুন
ধাপ 8: প্রতিটি সম্পাদকের ব্যবহারকারী সেটিংসে JDK সেট করুন
রানটাইম পাথগুলি মেশিন-নির্দিষ্ট, তাই সেগুলি ব্যবহারকারীর সেটিংসের অন্তর্গত এবং কখনও সংগ্রহস্থলে নয়৷ প্রতিটি সম্পাদকের নিজস্ব ব্যবহারকারী সেটিংস ফাইল রয়েছে এবং আপনাকে উভয়ই সম্পাদনা করতে হবে। অবস্থানগুলি অপারেটিং সিস্টেম দ্বারা পৃথক।
Linux: VS কোডের জন্য ~/.config/Code/User/settings.json এবং কার্সারের জন্য ~/.config/Cursor/User/settings.json।
macOS: ~/Library/Application Support/Code/User/settings.json এবং ~/Library/Application Support/Cursor/User/settings.json।
উইন্ডোজ: %APPDATA%\Code\User\settings.json এবং %APPDATA%\Cursor\User\settings.json।
উভয় ফাইলে একই দুটি কী যোগ করুন। ধাপ 1 থেকে echo $JAVA_HOME এর আউটপুট দিয়ে পাথ প্রতিস্থাপন করুন। রানটাইম নাম অবশ্যই JavaSE-25 হতে হবে যাতে ভাষা সার্ভার এটিকে pom-এ java.version প্রপার্টিতে ম্যাপ করতে পারে।
{ "java.jdt.ls.java.home": "/home/you/.sdkman/candidates/java/current", "java.configuration.runtimes": [ { "name": "JavaSE-25", "path": "/home/you/.sdkman/candidates/java/current"}, "সত্য"}
সংরক্ষণ করার পরে প্রতিটি সম্পাদক পুনরায় লোড করুন। কমান্ড প্যালেট খুলুন এবং জাভা চালান: প্রতিটিতে জাভা রানটাইম কনফিগার করুন। প্যানেলে JavaSE-25 কে ডিফল্ট হিসাবে তালিকাভুক্ত করা উচিত এবং আপনার পথ দেখাতে হবে। যদি এটি একটি পুরানো JDK কে প্রজেক্ট রানটাইম হিসাবে তালিকাভুক্ত করে, তবে স্বাভাবিক কারণটি একটি অনুপস্থিত ডিফল্ট পতাকা বা রানটাইম নামের একটি টাইপো।
ধাপ 9: শেয়ার করা ওয়ার্কস্পেস সেটিংস কমিট করুন
মেশিন-নির্দিষ্ট নয় এমন সবকিছুই সংগ্রহস্থলের ভিতরে .vscode/settings.json-এ যায়। কার্সার একই ফোল্ডার পড়ে, তাই একটি ফাইল উভয় সম্পাদককে কনফিগার করে। ভাষা সার্ভার মাভেনকে কীভাবে ব্যবহার করে তা টিউন করার জন্য এটিও সঠিক জায়গা। যদি আপনার আসল প্রকল্পটি এই একক পরিষেবার পরিবর্তে একটি মাল্টি-মডিউল বিল্ড হয়, তাহলে কার্সার বনাম ভিএস কোড মনোরেপো সেটআপ দেখায় কিভাবে অনেক মডিউল জুড়ে দ্রুত ইন্ডেক্সিং রাখা যায়।
{ "recommendations": [ "redhat.java", "vscjava.vscode-java-debug", "vscjava.vscode-java-test", "vscjava.vscode-maven", "vscjava.vscode-java-নির্ভরতা", "vmware.vscode-spring-boot]}
দ্বিতীয় ব্লকটি .vscode/extensions.json হিসাবে সংরক্ষণ করুন। যখন কেউ প্রথমবার রেপো খোলে তখন উভয় সম্পাদকই এগুলি ইনস্টল করার প্রস্তাব দেন। এটি উদ্দেশ্যমূলকভাবে স্ক্রিপ্ট/java-extensions.txt নকল করে। টেক্সট ফাইলটি অটোমেশন চালায়, যখন এই ফাইলটি ইন-এডিটর প্রম্পট চালায়, এবং CI-এ গ্যাপ চেক দুটি তালিকা ধরলে যদি তারা আলাদা হয়ে যায়।
এখন প্রতিটি সম্পাদকে প্রকল্পটি খুলুন। একটি সংক্ষিপ্ত আমদানির পরে, জাভা প্রজেক্ট ভিউ তার মাভেন নির্ভরতা সহ স্টক-পরিষেবা প্রদর্শন করবে। আপনি যদি একটি স্ট্যাটাস আইটেম দেখেন যা বলে যে ভাষা সার্ভার এখনও আমদানি করছে, কিছু বিচার করার আগে এটি শেষ হওয়ার জন্য অপেক্ষা করুন।
ধাপ 10 এবং 11: অ্যাপটি ডিবাগ করুন এবং উভয় এডিটর থেকে পরীক্ষা চালান
ধাপ 10: লঞ্চ এবং টাস্ক কনফিগারেশন যোগ করুন
ডিবাগ কনফিগারগুলি হল সাধারণ JSON, এবং তারা উভয় সম্পাদকেই অভিন্ন৷ জাভা ডিবাগার এক্সটেনশন লঞ্চ এবং সংযুক্তি পরিচালনা করে, তাই একটি ফাইল উভয়ই কভার করে। ব্রেকপয়েন্ট, লগপয়েন্ট এবং টাস্কের গভীর সফর কার্সার বনাম VS কোড ডিবাগিং গাইডে থাকে। এই প্রকল্পের শুধুমাত্র দুটি কনফিগারেশন প্রয়োজন।
StockService.adjust-এর প্রথম লাইনে একটি ব্রেকপয়েন্ট সেট করুন, Run and Debug ভিউতে Run stock-service বাছাই করুন এবং এটি শুরু করুন। অন্য টার্মিনালে, একটি অনুরোধ পাঠান।
curl -s -X POST localhost:8080/stock/A-100/adjust \ -H 'Content-Type: application/json' -d '{"delta": 25}'
ভেরিয়েবল প্যানেলে দৃশ্যমান আর্গুমেন্টের সাথে সম্পাদককে আপনার ব্রেকপয়েন্টে থামতে হবে। চালিয়ে যান, এবং শেল আপডেট করা আইটেমটি প্রিন্ট করে।
{"sku":"A-100","পরিমাণ":25}
এখন প্রত্যাখ্যান পথটি ট্রিগার করুন।
curl -s -i -X POST localhost:8080/stock/A-100/adjust \ -H 'Content-Type: application/json' -d '{"delta": -30}'
HTTP/1.1 422 সামগ্রী-প্রকার: application/json {"error":"স্টক A-100 এর জন্য শূন্যের নিচে যেতে পারে না"}
দ্বিতীয় কনফিগারেশনটি সেই ক্ষেত্রে যেখানে অ্যাপটি ইতিমধ্যেই অন্য কোথাও চলে, যেমন একটি টার্মিনাল টাস্ক বা একটি পাত্রে। ডিবাগ পোর্ট টাস্ক দিয়ে রান দিয়ে শুরু করুন, তারপর পোর্ট 5005 এ সংযুক্ত করুন। স্প্রিং বুটের মাভেন প্লাগইন JVM আর্গুমেন্টগুলি পাস করে এবং উভয় সম্পাদক একইভাবে সংযুক্ত করে।
ধাপ 11: টেস্টিং ভিউ এবং টার্মিনাল থেকে পরীক্ষা চালান
প্রতিটি সম্পাদকে টেস্টিং ভিউ খুলুন। জাভা টেস্ট এক্সটেনশন ইনস্টল করার সাথে, স্টকসার্ভিসটেস্টে তিনটি পরীক্ষা এবং প্রসঙ্গ পরীক্ষা একটি গাছে উপস্থিত হয় এবং আপনি নালা থেকে তাদের যেকোনো একটি চালাতে বা ডিবাগ করতে পারেন। যদি গাছটি একটি সম্পাদকে খালি থাকে এবং অন্যটিতে জনবহুল থাকে, তাহলে ধাপ 7 থেকে আপনার গ্যাপ চেক ইতিমধ্যেই আপনাকে বলেছে কেন।
সম্পাদক যাই করুন না কেন, টার্মিনাল সত্যের উৎস। এটি মেলে তা নিশ্চিত করতে একটি একক ক্লাস চালান।
mvn -B -ntp -Dtest=StockServiceTest পরীক্ষা
[INFO] চলমান dev.techlab.stock.StockServiceTest [INFO] পরীক্ষা চলছে: 3, ব্যর্থতা: 0, ত্রুটি: 0, এড়িয়ে যাওয়া: 0 [INFO] বিল্ড সফলতা
উদ্দেশ্যমূলকভাবে একটি পরীক্ষা ভঙ্গ করুন, উদাহরণস্বরূপ, প্রত্যাশিত পরিমাণ 25 থেকে 26 পরিবর্তন করে, এবং উভয় সম্পাদকের মধ্যে এটিকে নালা থেকে চালান৷ ব্যর্থতা বার্তা মেলে উচিত. যদি এটি না হয়, সম্পাদক একটি বাসি কম্পাইল চালাচ্ছে, এবং সমস্যা সমাধান বিভাগে ক্লিন-ওয়ার্কস্পেস কমান্ডটি আপনার সমাধান।
ধাপ 12: প্রতিটি সম্পাদকের এআইকে একই জাভা নিয়ম দিন
এটি সেই ধাপ যেখানে কার্সার এবং ভিএস কোড প্রকৃতপক্ষে ভিন্ন হয়ে যায়, কারণ সহকারীরা বিভিন্ন ফাইল পড়ে। কার্সার .cursor/rules থেকে নিয়ম পড়ে। VS কোডে GitHub Copilot .github/copilot-instructions.md পড়ে। আপনি যদি শুধুমাত্র একটি লেখেন, একজন সহকারী আনন্দের সাথে জাভা 8 স্টাইল কোড তৈরি করবে ফিল্ড ইনজেকশন এবং কোন পরীক্ষা ছাড়াই।
--- বর্ণনা: স্টক-সার্ভিস গ্লোবগুলির জন্য জাভা 25 এবং স্প্রিং বুট কনভেনশনগুলি: src/**/*.java সর্বদা প্রয়োগ করুন: মিথ্যা --- - টার্গেট জাভা 25. ক্লাসিক ডিটিওগুলির তুলনায় রেকর্ড, সিল করা ইন্টারফেস এবং প্যাটার্ন ম্যাচিং পছন্দ করুন৷ - কনস্ট্রাক্টর ইনজেকশন ব্যবহার করুন। ফিল্ড ইনজেকশন ব্যবহার করবেন না। - প্রতিটি আচরণ পরিবর্তনের জন্য AssertJ এর সাথে একটি JUnit 5 পরীক্ষা যোগ করুন বা আপডেট করুন। - কেন না বলে pom.xml-এ নতুন নির্ভরতা যোগ করবেন না। - আপনি একটি কাজ সম্পন্ন হয়েছে বলার আগে, চালান: bash scripts/verify.sh - টার্গেট/ এর অধীনে ফাইলগুলি কখনই সম্পাদনা করবেন না।
# স্টক-পরিষেবার জন্য কপাইলট নির্দেশাবলী - টার্গেট জাভা 25। রেকর্ড, সিল করা ইন্টারফেস এবং প্যাটার্ন ম্যাচিং পছন্দ করুন। - শুধুমাত্র কনস্ট্রাক্টর ইনজেকশন ব্যবহার করুন। - প্রতিটি আচরণ পরিবর্তনের জন্য AssertJ ব্যবহার করে JUnit 5 পরীক্ষা প্রয়োজন। - কারণ ব্যাখ্যা না করে pom.xml-এ নির্ভরতা যোগ করবেন না। - একটি কাজ সমাপ্ত ঘোষণা করার আগে, `bash scripts/verify.sh` চালান এবং ফলাফল রিপোর্ট করুন। - লক্ষ্যের অধীনে ফাইলগুলি কখনই সম্পাদনা করবেন না।
সেগুলিকে .cursor/rules/java.mdc এবং .github/copilot-instructions.md হিসাবে সংরক্ষণ করুন। দুটি বুলেট তালিকা হাতে বা স্ক্রিপ্ট দ্বারা সিঙ্কে রাখুন। একটি রেপো গাইডে কার্সার বনাম ভিএস কোড একটি ড্রিফ্ট চেক দেখায় যা তুলনা স্বয়ংক্রিয় করে।
প্রতিটি ফাইলের শেষ নিয়মটি গুরুত্বপূর্ণ। এটি এজেন্টকে আপনার করা একই গেট স্ক্রিপ্ট চালাতে বাধ্য করে, যা একটি মতামতযুক্ত পরামর্শ ইঞ্জিনকে একটি উদ্দেশ্য পাস বা ব্যর্থতার সাথে একটি লুপে পরিণত করে। এটি খরচও নিয়ন্ত্রণ করে। 12 অক্টোবরের প্ল্যান পরিবর্তনের পর থেকে, কার্সরের প্রিমিয়াম এবং উচ্চতর প্ল্যানগুলির তৃতীয়-পক্ষের মডেলগুলি প্রিপেইড টপ-আপগুলি থেকে API তালিকার মূল্যে বিল করা হয়, তাই একজন এজেন্ট যেটি একটি ভাঙা Maven বিল্ডের দশগুণ চেষ্টা করে তার আসল অর্থ খরচ হয়৷ আপনার কার্সার অ্যাকাউন্ট সেটিংসে একটি ব্যয়ের ক্যাপ সেট করুন এবং যাচাই স্ক্রিপ্টটি শান্ত এবং দ্রুত রাখুন যাতে এজেন্টের অনেক পুনরাবৃত্তির প্রয়োজন না হয়।
একটি .cursorignore ফাইল যোগ করুন যাতে কার্সার বিল্ড আউটপুট সূচী না করে।
target/ *.log .env
VS Code-এর Copilot এর সেটিংসে নিজস্ব বর্জন নিয়ন্ত্রণ রয়েছে এবং সেগুলি রেপোর ফাইলের পরিবর্তে অ্যাকাউন্ট বা প্রতিষ্ঠানের জন্য কনফিগার করা হয়। এটি একটি বাস্তব অসামঞ্জস্য, এবং এটি আপনার README-এ লিখার প্রধান কারণ কোন এজেন্টের অধিবেশন চলেছিল।
ধাপ 13: একটি গেট স্ক্রিপ্ট এবং একটি CI ওয়ার্কফ্লো যোগ করুন
এখন পর্যন্ত সবকিছু আপনার মেশিনে বাস করে। গেট স্ক্রিপ্ট চেকগুলিকে একটি কমান্ডে রাখে এবং CI ওয়ার্কফ্লো প্রতিটি ধাক্কায় একই কমান্ড চালায়। টুলচেন চেক দিয়ে শুরু করুন, যেটি দ্রুত ব্যর্থ হয় যখন কেউ ভুল JDK এ থাকে।
#!/usr/bin/env bash # scripts/verify.sh সেট -euo pipefail cd "$(dirname "$0")/.." bash scripts/check-java-toolchain.sh mvn -B -ntp যাচাই করুন যদি [ "${SKIP_EDITOR_CHECK:-0}"]" ! = " তারপর bash scripts/java-gap-check.sh || ইকো "WARN এডিটর এক্সটেনশন গ্যাপ, উপরে আউটপুট দেখুন" fi echo "verify OK"
নাম: ci on: push: pull_request: jobs: verify: run-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 এর সাথে: distribution: temurin java-version: '25' cache: maven - name: Verify run: SKIPS_1_verify.
শেষ ব্লকটি .github/workflows/ci.yml হিসাবে সংরক্ষণ করুন। দেখানো অ্যাকশন সংস্করণগুলি ব্যাপকভাবে উপলভ্য, তাই আপনি যখন এটি গ্রহণ করেন তখন বর্তমান প্রধান রিলিজে সেগুলিকে বাম্প করুন৷ সিআই এডিটর চেক এড়িয়ে যায় কারণ রানারদের কোনো এডিটর ইনস্টল করা নেই।
আপনি প্রতিশ্রুতি দেওয়ার আগে, আপনি যা পুশ করতে চলেছেন তার উপর একটি গোপনীয় স্ক্যান চালান। এজেন্ট-চালিত সম্পাদকরা বিস্তৃত প্রসঙ্গ পড়ে এবং একটি কনফিগার ফাইলে একটি বিপথগামী শংসাপত্র মিস করা সহজ। কার্সার বনাম ভিএস কোড সিক্রেটস গার্ড ঠিক এর জন্য একটি ক্যানারি-ভিত্তিক পরীক্ষা তৈরি করে। তারপর স্থানীয়ভাবে একবার গেট চালান।
bash স্ক্রিপ্ট/verify.sh
ঠিক আছে java 25 এবং Maven সম্মত [INFO] টেস্ট রান: 4, ব্যর্থতা: 0, ত্রুটি: 0, এড়িয়ে যাওয়া: 0 [INFO] বিল্ড সফলতা ঠিক আছে কোড redhat.java... যাচাই করুন
যেখানে জাভা কাজের জন্য কার্সার এবং ভিএস কোড আলাদা
তেরো ধাপ পরে প্যাটার্ন পরিষ্কার. জাভা মেকানিক্স উভয় সম্পাদকেই একই, এবং চারটি জায়গায় পার্থক্য ক্লাস্টার। টেবিলটি জাভা বিকাশকারীর দৃষ্টিকোণ থেকে তাদের সংক্ষিপ্ত করে। এগুলি এই সেটআপ থেকে ব্যবহারিক পর্যবেক্ষণ, বেঞ্চমার্ক নয়।
যদি এআই সারিটি আপনি পড়ার কারণ হয়ে থাকে তবে মনে রাখবেন যে কোনও সম্পাদকই আপনার জাভাকে নিজে থেকে ভাল করে না। যা পার্থক্য করে তা হল একটি গেট স্ক্রিপ্ট, একটি নিয়ম ফাইল এবং একটি পরীক্ষা স্যুট। চালানোর জন্য কোন পরীক্ষা ছাড়াই একটি মডেল আত্মবিশ্বাসী কোড উদ্ভাবন করবে, এবং একটি দ্রুত যাচাই স্ক্রিপ্ট সহ একটি মডেল নিজেই সংশোধন করবে।
কার্সরের ক্লাউড এজেন্ট এবং লাইভ অ্যাপ বিল্ডিং, 5 নভেম্বর ঘোষণা করা হয়েছে, এর লক্ষ্য হল ওয়েব অ্যাপ যা ডাটাবেস এবং প্রমাণীকরণ সহ পাঠানো হয়। তারা আপনার এখানে তৈরি করা স্থানীয় ম্যাভেন লুপটি প্রতিস্থাপন করে না, তাই এগুলিকে প্রোটোটাইপের সংযোজন হিসাবে বিবেচনা করুন, আপনার স্প্রিং বুট পরিষেবা চালানোর একটি ভিন্ন উপায় নয়।
কার্সার এবং ভিএস কোডে জাভা সহ 8টি সাধারণ সমস্যা
একটি মেশিনে দুটি JDK. টার্মিনাল একটি ব্যবহার করে, ভাষা সার্ভার অন্যটি ব্যবহার করে এবং আপনি যেখানে ক্লিক করেন তার উপর নির্ভর করে পাস বা ফেল তৈরি করে। সর্বদা mvn -v চালান এবং জাভা কনফিগার প্যানেলের সাথে তুলনা করুন। ধাপ 13-এ টুলচেন স্ক্রিপ্ট এই কারণে বিদ্যমান।
নিখুঁত JDK পাথ প্রতিশ্রুতিবদ্ধ। .vscode/settings.json-এ /home/you/.sdkman/... এর মতো একটি লাইন আপনার হোম ডিরেক্টরি ভাগ করে না এমন প্রতিটি সতীর্থকে ভেঙে দেয়। ব্যবহারকারী সেটিংসে পাথ রাখুন।
একটি বুট 4 পোমে একটি বুট 3 স্টার্টার নাম ব্যবহার করা। বুট 4 এর স্টার্টারকে বিভক্ত করে, তাই পুরানো কপি-পেস্ট নির্ভরতা ব্লকগুলি ভুল মডিউলগুলি সমাধান করতে বা টানতে ব্যর্থ হয়। সন্দেহ হলে, Spring Initializr থেকে একটি রেফারেন্স pom তৈরি করুন এবং এটি আলাদা করুন।
ম্যাভেন 4কে প্রথম দিকে দত্তক নেওয়া। প্রকল্পটি এটিকে একটি রিলিজ প্রার্থী হিসেবে চিহ্নিত করে এবং উৎপাদন ব্যবহারের বিরুদ্ধে সতর্ক করে। একটি নতুন টুল সংস্করণ একটি ভাষা সার্ভার বাগ জন্য সমাধান নয়.
একটি বুট রিলিজ প্রার্থীকে উত্পাদন হিসাবে বিবেচনা করা। স্প্রিং বুট 4.2.0-RC2 একটি প্রিরিলিজ। এটি একটি শাখায় চালান, এবং 4.2 চূড়ান্ত না হওয়া পর্যন্ত 4.1.2 চালান৷
একযোগে উভয় সম্পাদকে একই রেপো খোলা। প্রতিটি সম্পাদক তার নিজস্ব ভাষা সার্ভার শুরু করে, এবং উভয়ই লক্ষ্য/-এ কম্পাইল করে। আপনি ডবল মেমরি প্রদান এবং একটি অর্ধ লিখিত ক্লাস ডিরেক্টরি ঝুঁকি. অন্যটিতে কাজ করার আগে একটি বন্ধ করুন।
এজেন্ট ইনডেক্সকে আউটপুট তৈরি করতে দেওয়া। নিয়ম উপেক্ষা না করে, একজন এআই সহকারী কম্পাইল করা ক্লাস এবং লগগুলিতে প্রসঙ্গ ব্যয় করে। কার্সারে .cursorignore ব্যবহার করুন এবং search/exclude-এ লক্ষ্য রাখুন।
পূর্বরূপ লাইব্রেরির সাথে রানটাইম সংস্করণ মিশ্রিত করা। আপনি JavaFX বা অন্য রানটাইম-কাপলড লাইব্রেরি যোগ করলে, আপনার JDK-এর সাথে এর লাইনটি মেলে। Oracle এর JavaFX 25 রিলিজ নোটগুলি হল JDK 25 এর সাথে জুটি নিশ্চিত করার জায়গা।
সম্পাদক এবং টুলিং ওয়াকথ্রুগুলির একটি বিস্তৃত সেট সফ্টওয়্যার কভারেজ হাবে বসে যদি আপনি একই গ্যাপ-চেক অভ্যাস অন্য ভাষায় প্রয়োগ করতে চান।
সমস্যা সমাধান: জাভা এডিটর সমস্যার জন্য 10টি সমাধান
Java রানটাইম সনাক্ত করা যায়নি। ভাষা সার্ভার একটি JDK 21 বা নতুন খুঁজে পায় না. আপনার JDK 25 পাথে ব্যবহারকারী সেটিংসে java.jdt.ls.java.home সেট করুন এবং উইন্ডোটি পুনরায় লোড করুন।
কোনো Maven আমদানি ছাড়াই একটি প্লেইন ফোল্ডার হিসেবে প্রজেক্ট দেখায়। আপনি একটি অভিভাবক ডিরেক্টরি খুললেন. ফাইল ব্যবহার করুন, pom.xml ধারণকারী ডিরেক্টরিতে ফোল্ডার খুলুন, তারপর Java চালান: ক্লিন জাভা ল্যাঙ্গুয়েজ সার্ভার ওয়ার্কস্পেস।
কার্সারে একটি এক্সটেনশন অনুপস্থিত। ব্যাশ স্ক্রিপ্ট/java-gap-check.sh চালান। যদি আইডিটি অনুপস্থিত থাকে, তাহলে একটি ঘনিষ্ঠ বিকল্পের জন্য কার্সারের এক্সটেনশন প্যানেল অনুসন্ধান করুন, অথবা কার্সার --ইনস্টল-এক্সটেনশন সহ একটি VSIX সাইডলোড করুন৷
ত্রুটি: রিলিজ সংস্করণ 25 সমর্থিত নয়। Maven একটি পুরানো JDK উপর চলছে. mvn -v চালান, JAVA_HOME ঠিক করুন, এবং শেল এবং উভয় সম্পাদককে পুনরায় চালু করুন যাতে তারা এটির উত্তরাধিকারী হয়।
ডিবাগার বলছে প্রধান শ্রেণী পাওয়া যায়নি। launch.json-এ প্রজেক্টের নাম অবশ্যই Maven আর্টিফ্যাক্ট আইডির সাথে মিলতে হবে, যা এখানে স্টক-সার্ভিস। একবার mvn কম্পাইল চালান যাতে ক্লাস বিদ্যমান থাকে।
spring-boot:run ব্যবহার করার সময় ব্রেকপয়েন্ট কখনো আঘাত করে না। প্লেইন স্প্রিং-বুট: রান একটি ডিবাগ পোর্ট খুলবে না। ডিবাগ পোর্ট টাস্ক এবং অ্যাটাচ কনফিগারেশন সহ রান ব্যবহার করুন।
পোম পরিবর্তন করার পরে লাল squiggles. জাভা চালান: প্রকল্পগুলি পুনরায় লোড করুন। যদি ত্রুটি থেকে যায়, .settings, .classpath এবং .project মুছুন, তারপর ভাষা সার্ভার ওয়ার্কস্পেস পরিষ্কার করুন।
ভাষা সার্ভার ধীর বা পুনরায় চালু হয়. এটা সম্ভবত মেমরি ছোট. java.jdt.ls.vmargs-এ -Xmx বাড়ান, অন্য সম্পাদক বন্ধ করুন এবং অনুসন্ধান থেকে লক্ষ্য বাদ দিন।
পোর্ট ইতিমধ্যেই ব্যবহার করা হচ্ছে। একটি পূর্ববর্তী ডিবাগ সেশন এখনও চলছে৷ রান এবং ডিবাগ টুলবার থেকে এটি বন্ধ করুন বা application.properties-এ server.port পরিবর্তন করুন।
কার্সার বা কোড কমান্ড পাওয়া যায়নি। শেল লঞ্চার কখনই ইনস্টল করা হয়নি। প্রতিটি সম্পাদকের কমান্ড প্যালেট থেকে শেল কমান্ড ইনস্টল চালান, তারপর একটি নতুন টার্মিনাল খুলুন।
যদি এইগুলির কোনওটিই মেলে না, ব্যর্থ সম্পাদকের আউটপুট প্যানেল থেকে ভাষা সার্ভার লগ ক্যাপচার করুন, তারপর অন্য সম্পাদকে একই ক্রিয়াটি পুনরুত্পাদন করুন৷ একটি সমস্যা যা প্যাকেজিংয়ের শুধুমাত্র একটি পয়েন্টে প্রদর্শিত হয় এবং একটি সমস্যা যা আপনার প্রকল্পের উভয় পয়েন্টে প্রদর্শিত হয়।
উভয় সম্পাদক ব্যবহার করে জাভা টিমের জন্য উন্নত টিপস
মাভেন ডেমনের সাথে নির্মাণের গতি বাড়ান। Apache Maven ডাউনলোড পৃষ্ঠাটি ম্যাভেন ডেমন 1.0.6 কে বর্তমান ডেমন রিলিজ হিসাবে তালিকাভুক্ত করে, আমরা যে পৃষ্ঠাটি পরীক্ষা করেছি সেই অনুসারে। আপনার টাস্কে mvnd চালানো হলে পুনরাবৃত্ত বিল্ডে JVM স্টার্টআপ কমে যায়।
একটি বর্ধিত বিল্ড ক্যাশে চেষ্টা করুন. Apache Maven সংস্করণ 1.3.0 এ একটি Maven বিল্ড ক্যাশে এক্সটেনশন রয়েছে। এটি স্থানীয় এবং দূরবর্তী ক্রমবর্ধমান ক্যাশিংকে লক্ষ্য করে এবং বড় প্রকল্পগুলিতে একটি শাখা পরীক্ষার মূল্য।
বুট 4.2 নিরাপদে পরীক্ষা করুন। 23 অক্টোবর প্রকাশিত প্রথম 4.2 রিলিজ প্রার্থী, একটি উবুন্টু 26.04-ভিত্তিক ডিফল্ট বিল্ডপ্যাকস বিল্ডার এবং এক্সিকিউটেবল-জার স্টার্টআপ উন্নতি যোগ করেছে। একটি শাখা তৈরি করুন, মূল সংস্করণটি বাম্প করুন, গেটটি চালান এবং ফলাফলের তুলনা করুন৷
রেপোতে আপনার সরঞ্জামগুলি পিন করুন। mvn wrapper:wrapper এর সাথে একটি Maven wrapper যোগ করুন এবং আপনার পরীক্ষা করা পিন করা সংস্করণটি কমিট করুন। তারপরে বিল্ডটি আর প্রতিটি ল্যাপটপের মাভেনের উপর নির্ভর করে না।
একটি প্রাক-ধাক্কা হুক যোগ করুন। SKIP_EDITOR_CHECK=1 bash scripts/verify.sh থেকে .git/hooks/pre-push এ কল করুন যাতে একটি ব্যর্থ বিল্ড কখনই মেশিন থেকে না যায়।
সাবধানে MCP মাধ্যমে সরঞ্জামগুলিতে তারের। উভয় সম্পাদকই এজেন্ট সেশন থেকে বাহ্যিক সরঞ্জাম কল করতে পারেন। কার্সার MCP বনাম VS কোড MCP ওয়াকথ্রু কনফিগার পার্থক্য ব্যাখ্যা করে, এবং এই টিউটোরিয়াল থেকে অডিট অভ্যাস সেখানেও প্রযোজ্য।
শৃঙ্খলার উপর একটি শেষ টিপ। মাসে একবার, প্রতিটি সম্পাদকের একটি পরিষ্কার প্রোফাইলে ফাঁক চেক চালান, আপনার দৈনিক নয়। প্রতিদিনের প্রোফাইলগুলি এমন এক্সটেনশনগুলি জমা করে যা মাস্ক করে যে একজন নতুন সতীর্থ আসলে কী দেখতে পাবে।
সম্পূর্ণ কাজের প্রকল্প
এখানে চূড়ান্ত বিন্যাস. প্রতিটি ফাইল উপরে একটি ধাপে উপস্থিত হয়েছে, এবং পুরো গাছটি প্রায় 15 টি ফাইল।
একটি নতুন ক্লোনের উপর শেষ থেকে শেষ পর্যন্ত কাজ করে তা প্রমাণ করতে, এই চারটি কমান্ড ক্রমানুসারে চালান। প্রথমটি PATH-এ যেকোন সম্পাদকের মধ্যেই এক্সটেনশন ইনস্টল করে, দ্বিতীয়টি গেট চালায়, তৃতীয়টি অ্যাপ শুরু করে এবং চতুর্থটি হেলথ এন্ডপয়েন্টে আঘাত করে৷
bash scripts/install-java-extensions.sh bash scripts/verify.sh mvn -B -ntp spring-boot:run & curl -s localhost:8080/actuator/health
{"status":"UP"}
যে স্বাস্থ্য প্রতিক্রিয়া শেষ লাইন. আপনার কাছে এখন একটি সংগ্রহস্থল রয়েছে যা দুটি সম্পাদক, একটি সিআই রানার এবং দুটি এআই সহকারী সবাই একইভাবে আচরণ করে। যখন কার্সার তার পরবর্তী আপডেট পাঠায় বা VS কোড ক্লাসিক UI অবসর নেওয়া শেষ করে, গ্যাপ চেক এবং গেটটি পুনরায় চালু করুন এবং আপনি এক মিনিটের মধ্যে জানতে পারবেন জাভা পাথে কিছু সরানো হয়েছে কিনা।
প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী
কার্সার বনাম VSCode: জাভার জন্য কোনটি ভাল?
উভয়ই জাভা মেকানিক্সে জিতবে না, কারণ উভয়ই একই ভাষা সার্ভার এবং একই ডিবাগ প্রোটোকল চালায়। আপনি যদি প্রথম পক্ষের মার্কেটপ্লেস এবং গিটহাব কপিলট ইন্টিগ্রেশন থেকে মাইক্রোসফটের জাভা এক্সটেনশন চান তাহলে ভিএস কোডের প্রান্ত রয়েছে। আপনি যদি এর এজেন্ট ওয়ার্কফ্লো এবং নিয়ম সিস্টেম চান তবে কার্সারের প্রান্ত রয়েছে। আপনার মেশিনে গ্যাপ চেক চালান এবং কি ইনস্টল হবে তার উপর ভিত্তি করে নির্বাচন করুন।
কার্সার কি Red Hat Java এক্সটেনশন সমর্থন করে?
আমাদের পর্যালোচনা করা কার্সার ডকুমেন্টেশন এবং রিলিজ নোটগুলি বক্সে জাভা জাহাজের জন্য Red Hat জাভা এক্সটেনশন বা মাইক্রোসফ্টের এক্সটেনশন প্যাক কিনা তা উল্লেখ করে না। কোনভাবেই অনুমান করবেন না। ধাপ 7 এটি সরাসরি কার্সার --list-extensions দিয়ে পরীক্ষা করে এবং প্রতি এক্সটেনশনে আপনাকে পাস বা ফেল দেয়।
2026 সালে আমার কোন JDK ব্যবহার করা উচিত?
JDK 25 ব্যবহার করুন। Oracle এটিকে 2030 সালের সেপ্টেম্বর পর্যন্ত পরিকল্পিত প্রিমিয়ার সাপোর্ট এবং সেপ্টেম্বর 2033 পর্যন্ত বর্ধিত সমর্থন সহ একটি দীর্ঘমেয়াদী-সাপোর্ট রিলিজ হিসাবে বর্ণনা করে। টেমুরিন সহ যেকোনো OpenJDK 25 ডিস্ট্রিবিউশন এই সেটআপের জন্য কাজ করে।
একটি নতুন প্রকল্পের জন্য আমার কি স্প্রিং বুট 4.2.0-RC2 ব্যবহার করা উচিত?
উৎপাদনের জন্য নয়। রিলিজ ক্যান্ডিডেট 2 এসেছে নভেম্বর 6, 2026-এ। স্থিতিশীল পছন্দ হল স্প্রিং বুট 4.1.2, একটি রক্ষণাবেক্ষণ রিলিজ। একটি পৃথক শাখায় 4.2 চেষ্টা করুন এবং চূড়ান্ত প্রকাশের পরে এটি প্রচার করুন।
এই টিউটোরিয়ালটি অনুসরণ করার জন্য আমার কি একটি অর্থপ্রদত্ত কার্সার পরিকল্পনা দরকার?
নং ধাপ 1 থেকে 11 এবং ধাপ 13 এর জন্য কোন AI প্রয়োজন নেই, এবং ধাপ 12 শুধুমাত্র একটি নিয়ম ফাইল লিখে। আপনি যখন তৃতীয় পক্ষের মডেলগুলিতে এজেন্ট চান তখন অর্থপ্রদানের পরিকল্পনাগুলি গুরুত্বপূর্ণ হতে শুরু করে, যেগুলি প্রিমিয়াম এবং তার উপরে প্রিপেইড টপ-আপগুলি থেকে API তালিকার মূল্যে বিল করা হয়৷ কেনার আগে কার্সারের মডেল এবং মূল্যের পৃষ্ঠা দেখুন।
আমি কি একই প্রকল্পে উভয় সম্পাদক ব্যবহার করতে পারি?
হ্যাঁ, দুটি সতর্কতার সাথে। অন্যটি ব্যবহার করার আগে একটি সম্পাদক বন্ধ করুন, যেহেতু উভয়ই লক্ষ্য ডিরেক্টরিতে লেখে। এবং AI নিয়মের ফাইলগুলিকে সিঙ্কে রাখুন, কারণ প্রতিটি সহকারী একটি আলাদা ফাইল পড়ে।
Maven 4 এই সেটআপের জন্য প্রস্তুত?
না। Apache Maven প্রজেক্ট ম্যাভেন 4 কে একটি রিলিজ প্রার্থী বলে এবং বলে যে এটি উন্নয়নের অধীনে থাকা অবস্থায় উৎপাদনের জন্য নিরাপদ নয়। Maven 3.x-এ থাকুন এবং যখন Maven 4 চূড়ান্ত রিলিজে পৌঁছাবে তখন আবার দেখুন।
এটি কি Maven এর পরিবর্তে Gradle এর সাথে কাজ করবে?
![Cursor vs VS Code Java Setup: 13 Steps, 60 Min [2026]](https://news-pillar-bucket.s3.ap-south-1.amazonaws.com/wire/2026/11/f3226970-2b04-4683-b65b-566d7ce1419e-large.webp)



