Spring Initializr हिंदी ट्यूटोरियल: Maven vs Gradle और प्रोजेक्ट सेटअप गाइड


ये हमारा Spring Boot Tutorials का तीसरा आर्टिकल है और इसमें हम Spring Initializr Detail और Setup के साथ Maven और Gradle क्या है? और हमे इनमे से क्या यूज़ करना चाहिए? और क्यों? ये सब विस्तार से जानेंगे।

पिछले आर्टिकल में हमने Spring Boot Development Environment Setup को अच्छे स जाना था। और यहाँ हमने कमांड लाइन से प्रोजेक्ट को शुरू करने के लिए सेटिंग्स को जाना था। अब आगे बढ़ते है।

येstart.spring.io द्वारा Spring Boot प्रोजेक्ट शुरू करने के तरीकों में सब से आसान तरीका है Spring initializr का। ये हमें काफी सिस्टमैटिकली और आसान तरीकों से प्रोजेक्ट शुरू करने की सुविधा प्रदान करता है। हमें सही तरह से प्रोजेक्ट स्ट्रक्चर बनाकर देता है। Beginners लेवल पर और एडवांस लेवल पर भी प्रोजेक्ट शुरू करने के लिए Spring initializr का ही यूज़ होता है।

Spring Initializr & Maven vs Gradle



Spring Boot प्रोजेक्ट शुरू करने के अन्य दो तरीके भी होते है जैसे कमांड लाइन और Spring Tool Suite जो हमारे IDE में ही उपलब्ध होता है।

Spring Initializr Detail and Setup

ये काफी आसान है, आप चाहे पहली बार यहाँ आये हो लेकिन आप भी Spring Initializr से आसानी से शुरवात कर सकते हो।

इसे स्टार्ट करने के लिए आपको सिर्फ अपने ब्राउज़र में Spring Initializr टाइप करना है। और सर्च करने के बाद सबसे पहले आपको start.spring.io की वेबसाइट दिखाई देगी जिसका टाइटल होगा Spring Initializr। इस पर आपको क्लिक करना है।

क्लिक करते ही आप Spring Initializr के टूल पर पहुँच जावोगे जहाँ आप आसानी से अपने लिए प्रोजेक्ट स्ट्रक्चर के साथ pom.xml और application.properties साथ ही में क्लास बनाकर मिलता है।

spring-initializr-page-screenshot


यहाँ आपको टूल डैशबोर्ड पर लेफ्ट और राईट ऐसे दो हिस्से दिखाई देंगे। लेफ्ट हिस्से में मेटाडाटा के साथ प्रोजेक्ट बनाने के सभी ऑप्शन दिए होते है तो दुसरे राईट हिस्से में डिपेंडेंसीज जोड़ने का ऑप्शन होता है।

डिपेंडेंसीज क्या होती है? क्यों जोड़ी जाती है? किस तरह से काम करती है? ये सब हम अगले आर्टिकल में जानेंगे। इसलिए अभी आप प्रीबिल्ड फाइल्स कह सकते है जो अलग-अलग कामों के लिए हम जोड़ते है जिस से हमे ज्यादा कोड लिखने की जरूरत नहीं होती और हमारा बॉयलरप्लेट कोड कम हो जाता है।

प्रोजेक्ट के लेफ्ट साइड में हमें Project, Language, Spring Boot, Project Metadata ये ऑप्शन होते है, चलो इन ऑप्शन्स को डिटेल में समझते है।

Spring Initializr screenshot 2

Project

यहाँ पर हमें तीन ऑप्शन मिलते है 1) Gradle - Groovy 2)Gradle - Kotlin 3) Maven

यहाँ पर हमें डिसाइड करना होता है की हमें अपने प्रोजेक्ट में Maven का यूज़ करना है या Gradle का। अब ये Maven और Gradle क्या है? हमें कैसे पता चलेगा हम Maven या Gradle का यूज़ करें? ये सब हम इस आर्टिकल में ही जानेंगे। अभी के लिए हम इतना समझते है की Maven और Gradle में डिपेंडेंसीज रखते है। अगर हम Maven चूज करते है तो हमारी pom.xml फाइल जनरेट होती है और Gradle में build.gradle फाइल जनरेट होती है।

Language

इसके बाद हमारे सामने ऑप्शन होता है लैंग्वेज चुनने का यहाँ Java, Kotlin और Groovy ये ऑप्शन होते है। हम जावा में प्रोजेक्ट बना रहे है तो हम यहाँ से जावा language चुनते है।

Spring Boot

इसके बाद Spring Boot ऑप्शन में हमे स्प्रिंग बूट के कुछ लेटेस्ट और स्टेबल वर्शन दिखाई देते है, कई बार डेवलपर्स पुराने लाइब्रेरीज (जैसे Java 8, कुछ डेटाबेस ड्राइवर्स ) के साथ काम कर रहे होते है, ऐसे में कई बार Spring Boot के नये वर्शन कम्पैटिबल हो ही ये कह नहीं सकते जिस से दिक्कते आती है, इसलिए Spring Initializr आपको नये या स्टेबल वर्शन चुनने का ऑप्शन देता है।

Project Metadata

इसे बाद आता है प्रोजेक्ट का metadata। जो प्रोजेक्ट के स्ट्रक्चर को सही तरीके से डिफाइन करता है जैसे, project structure, package naming, build configuration, और final jar/war structure । इसका फायदा ये है की इससे कोड organized रहता है, और बड़े-बड़े प्रोजेक्ट्स में maintain करना काफी आसान होता है। और Maven और Gradle जैसे टूल आपके प्रोजेक्ट को यूनिक आइडेंटिटी दे पाते है।

यहाँ पर हमें कुछ ऑप्शन मिलते है जिसे फिल करना होता है।
  • Group
  • Artifact
  • Name
  • Description
  • Package Name
  • Packaging
  • Java

Group - इसे हम Organizational Namespace कहते है, याने ये कम्पनी या वेबसाइट का डोमेन नाम होता है जो reverse domain name फॉर्मेट में लिखा जाता है। याने “com.example” , याने इस से पता चलता है की हमारे कम्पनी या वेबसाइट का डोमेन नाम example.com है।

ये जावा स्ट्रक्चर पैकेज का पहला हिस्सा है जो maven और gradle जैसे टूल में प्रोजेक्ट को यूनिक पहचान दिलाता है। <groupId>com.example</groupId>

Artifact - ये हमारे प्रोजेक्ट का नाम होता है, साथ ही ये artifactID को डिफाइन करता है, याने जब हम अपने प्रोजेक्ट की ।jar या ।war फाइल बनायेंगे तो उस फाइल को Artifact ही नाम प्रदान करेगा। जैसे अगर “myproject” ये हमारे प्रोजेक्ट का Artifact नाम है तो Maven और Gradle इसे इस तरह से डिफाइन करेगा - <artifactId>myproject</artifactId> और जब ।jar फाइल क्रिएट होगी तब उसका नाम “myproject-0.0.1-SNAPSHOT.jar” इस तरह से रहेगा।

Name - जब हम Artifact में प्रोजेक्ट नाम देते है तो Spring Initializr वही Artifact हमारे प्रोजेक्ट नाम में सेट कर देता है। याने Artifact और Name ये दोनों ही सेम रहते है। लेकिन हम इसे बदल सकते है , ये हमरे प्रोजेक्ट का display name होता है। “My First Project” इस तरह से हम अपने प्रोजेक्ट को नाम दे सकते है। ये logging और डॉक्यूमेंटेशन में दिखाई देता है।

Description - हमारे प्रोजेक्ट का डिस्क्रिप्शन यूजर्स या दुसरे डेवलपर्स के लिए प्रोजेक्ट को समझने में हेल्प करता है। साथ ही ये documentation और pom.xml के लिए भी हेल्पफुल होता है।

Package Name - Spring initializr इसे Group और Artifact से मिलाकर बना देता है, लेकिन आप खुद भी इसे सेट कर सकते है। अगर आप जावा सीखे है तो आपको पता ही होगा, कोड को organised रखने के लिए packages काफी जरुरी है। जिस से namespace conflict नहीं होता।

Packaging - यहाँ पर आप तय करते है की आपके प्रोजेक्ट का फाइनल बिल्ड फॉर्मेट क्या होनेवाला है। यहाँ पर आपको चुनना होता है Jar या War

अब आपको यहाँ पर क्या चुनना चाहिए ये भी जरूरी है। मैंने जितने भी स्प्रिंग बूट प्रोजेक्ट बनाये है उसके लिए Jar मे ही बनाया है। डिफ़ॉल्ट रूप से जार को ही रहता है। जब हम Standalone spring boot एप्लीकेशन बनाते है, जहाँ पर हमे external server की आवश्यकता नहीं है याने हम किसी तरह का एक्सटर्नल सर्वर deploy नहीं कर रहे है तो हमे Jar ही चुनना चाहिए।

War हम तभी चुनते है जब हम एक्सटर्नल सर्वर का उपयोग करनेवाले है। लेकिन 90% हम Jar को ही चुनते है।

Java - यहाँ आप अपने हिसाब से जावा का वर्शन चुनते है। ये इसलिए जरुरी है क्यों की Spring Boot के सभी वर्शन जावा के कुछ ही वर्शनके साथ Compatible होते है।

इस तरह से हम Spring initializr को समझते है। इसका राईट साइड का जो हिस्सा है उसमे हम डिपेंडेंसी जोड़ते है। डिपेंडेंसी के बारे में अगले आर्टिकल में विस्तार से चर्चा करेंगे। अब आगे हम Gradle और Maven के बारे में विस्तार से जान लेते है, ताकि आपके मन में कोई सवाल अधुरा ना रहे।

Gradle और Maven क्या है?

जब मैं खुद स्प्रिंग फ्रेमवर्क सिख रहा था, तब मेरे मन में ये सवाल जरुर आता था, और मैं समझता था की Maven का यूज़ वेब एप्लीकेशन के लिए और Gradle का यूज़ एंड्राइड एप्प या अन्य एप्प के लिए किया जाता होगा। लेकिन मैं गलत था। और इसीलिए मुझे लगता है की इन दोनों के difference को एक्सप्लेन किया जाना चाहिए।

वास्तव में दोनों एक जैसे ही है, दोनों ही बिल्ड टूल है जिसका उपयोग डिपेंडेंसी मैनेजमेंट, बिल्ड प्रोसेस, और प्रोजेक्ट स्ट्रक्चर को बनाने के लिए होता है। Spring Boot में प्रोजेक्ट को बिल्ड करने, डिपेंडेंसी डाउनलोड करने और प्रोजेक्ट को रन करने के लिए ये दोनों टूल्स (दोनों में से एक) जरुरी है।

जहाँ Maven एक XML-Based टूल है वहीँ Gradle एक Kotlin-Based टूल है। Maven में हम pom.xml का यूज़ करने डिपेंडेंसी को मैनेज करते है वहीँ Gradle में build.gradle का इस्तेमाल करके डिपेंडेंसी मैनेज करते है। याने इसका मतलब है की ये दोनों ही टूल एक ही काम करते है।

तो सवाल ये है की हम कैसे तय करे की हमे Maven का यूज़ करना है या Gradle का? चलों इसे समझते है।

यहाँ पर आप Example देख सकते है किस तरह से Maven और  Gradle में dependency ऐड की जाती है।
Maven (pom.xml) Gradle (build.gradle)
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <version>3.3.4</version>
</dependency>
implementation 'org.springframework.boot:spring-boot-starter-web:3.3.4'


Maven और Gradle में अंतर

  • सबसे पहला अंतर तो हमने जान लिया है, Maven डिपेंडेंसी को xml फाइल में एक्सप्लेन करता है तो Gradle डिपेंडेंसी को सिंपल सिंटेक्स फॉर्मेट में एक्सप्लेन करता है।
  • Maven एक काफी धीमा टूल है, ये लीनियर बिल्ड प्रोसेस को फॉलो करता है, और शुरवात से सभी डिपेंडेंसी की जाँच करता है। लेकिन Gradle इस से काफी तेज है ये इन्क्रीमेंटल बिल्ड्स, पैरेलल प्रोसेसिंग और कैशिंग का यूज़ करता है।
  • लचीलेपन की बात की जाये तो Maven कम लचीला होता है जो स्टैण्डर्ड स्ट्रक्चर और कन्वेंशन पर डिपेंड होता है। लेकिन Gradle काफी लचीला है जो कस्टम टास्क्स और स्क्रिप्टिंग के लिए बेहतर होता है।
  • Maven का यूज़ beginners लेवल पर, या छोटे एप्लीकेशन के लिए, जावा के पुराने प्रोजेक्ट्स के लिए, छोटे Spring Boot एप्लीकेशन के लिए किया जाता है। वही Gradle का यूज़ मॉडर्न प्रोजेक्ट्स, Android डेवलपमेंट, जटिल बिल्ड लॉजिक, Spring Boot के बड़े और जटिल एप्लीकेशन के लिए किया जाता है।
  • IntelliJ IDE, Eclipse, NetBeans में Maven बंडल अवेलेबल होता है, तो IntelliJ IDEA, Android Studio, Eclipse में Gradle बण्डल अवेलेबल होते है।
  • Spring Boot दोनों को अच्छे से सपोर्ट करता है और Spring Initializr से Maven के लिए pom.xml और Gradle के लिए build.gradle जनरेट होता है।
टेबल के जरियें अंतर का विवरण 
विशेषता Maven Gradle
डिपेंडेंसी कॉन्फ़िगरेशन XML फाइल (pom.xml) में डिपेंडेंसी को परिभाषित करता है, जैसे टैग सिंपल सिंटैक्स फॉर्मेट में डिपेंडेंसी को परिभाषित करता है, जैसे implementation 'group:artifact:version'
बिल्ड की गति धीमा, लीनियर बिल्ड प्रोसेस को फॉलो करता है और शुरू से सभी डिपेंडेंसी की जाँच करता है तेज, इन्क्रीमेंटल बिल्ड्स, पैरेलल प्रोसेसिंग और कैशिंग का उपयोग करता है
लचीलापन कम लचीला, स्टैंडर्ड स्ट्रक्चर और कन्वेंशन पर निर्भर अधिक लचीला, कस्टम टास्क्स और स्क्रिप्टिंग के लिए बेहतर
उपयोग के मामले बिगिनर्स लेवल, छोटे एप्लिकेशन, पुराने Java प्रोजेक्ट्स, छोटे Spring Boot एप्लिकेशन मॉडर्न प्रोजेक्ट्स, Android डेवलपमेंट, जटिल बिल्ड लॉजिक, बड़े और जटिल Spring Boot एप्लिकेशन
IDE सपोर्ट IntelliJ IDEA, Eclipse, NetBeans में बंडल उपलब्ध IntelliJ IDEA, Android Studio, Eclipse में बंडल उपलब्ध
Spring Boot सपोर्ट पूर्ण सपोर्ट, Spring Initializr से pom.xml जनरेट होता है पूर्ण सपोर्ट, Spring Initializr से build.gradle जनरेट होता है

याने इनके अंतर को देखा जाये तो इन दोनों टूल्स में ज्यादा अंतर नहीं है बस Maven स्लो है Gradle से ये हमे समझ आता है। याने अब हम तय कर सकते है की हमें Maven चुनना है या Gradle। याने जब हम नये है,सिख रहे है, या जावा के पुराने प्रोजेक्ट पर काम कर रहे है, या हम छोटे छोटे वेब एप्लीकेशन बना रहे है तो हमारे लिए Maven का यूज़ करना बेहतर है Gradle के मुकाबले।

अगर हम एक प्रोफेशनल के तौर पर जटिल या काफी बड़े एप्लीकेशन पर काम करते है तो Gradle बेस्ट है Maven के मुकाबले।

आपकी प्रतिक्रिया

क्या आपका इस Spring Initializr Detail और Setup के आर्टिकल में किसी भी मुद्दे पर कोई सवाल है? हमें कमेंट बॉक्स में लिखें। आपका जरुर समाधान किया जायेगा।

Next Article में क्या होगा

आनेवाले आर्टिकल में हम डिपेंडेंसीज को डिटेल में समझेंगे, किस तरह से ये वर्क करती है? डिपेंडेंसी क्या है? से लेकर इसे बनाने की आवश्यकताओं डिटेल में जानेंगे ताकि आपको डिपेंडेंसी अच्छी तरह से समझ आ सकें।

अक्सर पूछे जाने वाले सवाल (FAQ)

1. Spring Initializr क्या है और इसका उपयोग क्यों करें?

Spring Initializr एक ऑनलाइन टूल है जो Spring Boot प्रोजेक्ट्स को आसानी से शुरू करने में मदद करता है। यह प्रोजेक्ट स्ट्रक्चर, डिपेंडेंसीज, और कॉन्फ़िगरेशन फाइल्स (जैसे pom.xml या build.gradle) जनरेट करता है, जिससे बिगिनर्स को कोड लिखने में समय बचता है।

2. Maven और Gradle में क्या अंतर है?

Maven एक XML-आधारित बिल्ड टूल है, जो छोटे और बिगिनर-लेवल प्रोजेक्ट्स के लिए उपयुक्त है। Gradle एक Kotlin/Groovy-आधारित टूल है, जो तेज और जटिल प्रोजेक्ट्स के लिए बेहतर है। Maven धीमा लेकिन सरल है, जबकि Gradle लचीला और तेज है।

3. मुझे Maven या Gradle में से क्या चुनना चाहिए?

अगर आप बिगिनर हैं या छोटे Spring Boot प्रोजेक्ट्स पर काम कर रहे हैं, तो Maven चुनें, क्योंकि यह सरल और IDE में बंडल होता है। जटिल या बड़े प्रोजेक्ट्स (जैसे माइक्रोसर्विसेज) के लिए Gradle बेहतर है, क्योंकि यह तेज और लचीला है।

4. क्या मैं Java 8 के साथ Spring Boot प्रोजेक्ट बना सकता हूँ?

हाँ, आप Java 8 के साथ Spring Boot प्रोजेक्ट बना सकते हैं, लेकिन कुछ नए Spring Boot वर्जन्स Java 11 या 17 की आवश्यकता रखते हैं। बिगिनर्स के लिए Java 17 या 21 चुनना बेहतर है, क्योंकि ये LTS वर्जन्स हैं और अधिक स्टेबल हैं।

5. Jar और War में क्या अंतर है, और मुझे क्या चुनना चाहिए?

Jar (Java Archive) स्टैंडअलोन Spring Boot एप्लिकेशन्स के लिए है, जो बिना एक्सटर्नल सर्वर के चलते हैं। War (Web Archive) तब चुना जाता है, जब आप एक्सटर्नल सर्वर (जैसे Tomcat) पर डिप्लॉय करना चाहते हैं। बिगिनर्स के लिए Jar डिफ़ॉल्ट और बेहतर है।

टिप्पणियाँ

इस ब्लॉग से लोकप्रिय पोस्ट

Spring Boot हिंदी ट्यूटोरियल: Spring Boot क्या है और इसके फायदे

Spring Boot Development Environment Setup हिंदी में: JDK, Maven, Gradle सेटअप गाइड