Java के साथ मोनोरेपॉजिटरी: कोड का संगठन और प्रबंधन

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Java के साथ मोनोरेपॉजिटरी: बड़े प्रोजेक्ट के कोड को कैसे व्यवस्थित करें



आधुनिक Java प्रोजेक्ट डेवलपमेंट में अक्सर सवाल उठता है: सभी घटकों को एक रिपॉजिटरी (मोनोरेपॉजिटरी) में रखें या उन्हें कई अलग-अलग रिपॉजिटरी (मल्टीरेपॉजिटरी) में विभाजित करें? मोनोरेपॉजिटरी (monorepo) एक दृष्टिकोण है जिसमें कई प्रोजेक्ट, लाइब्रेरी और सेवाओं का कोड एक ही संस्करण नियंत्रण प्रणाली में संग्रहीत किया जाता है। इस लेख में, हम देखेंगे कि Maven और Gradle का उपयोग करके मोनोरेपॉजिटरी में Java कोड को प्रभावी ढंग से कैसे व्यवस्थित किया जाए, और व्यावहारिक उदाहरणों पर विचार करेंगे।



Java के लिए मोनोरेपॉजिटरी के लाभ और हानियाँ



कार्यान्वयन पर जाने से पहले, यह समझना महत्वपूर्ण है कि मोनोरेपॉजिटरी कब उचित है। Java प्रोजेक्ट के लिए, यह विशेष रूप से उपयोगी है यदि आपके पास सामान्य लाइब्रेरी, डेटा मॉडल या इंटरफ़ेस हैं जिनका उपयोग कई सेवाओं द्वारा किया जाता है।



मोनोरेपॉजिटरी के लाभ

  • निर्भरता का एकीकृत संस्करण: सभी मॉड्यूल लाइब्रेरी के समान संस्करणों का उपयोग करते हैं, जो विरोध को समाप्त करता है।
  • सरल रीफैक्टरिंग: सामान्य API या डेटा मॉडल में परिवर्तन एक ही कमिट में परमाणु रूप से होता है।
  • सरलीकृत CI/CD: सभी मॉड्यूल के निर्माण और परीक्षण के लिए एक ही पाइपलाइन।
  • पारदर्शिता: प्रत्येक डेवलपर पूरे प्रोजेक्ट का कोड देखता है, जिससे आर्किटेक्चर को समझना आसान हो जाता है।


हानियाँ और उन्हें कैसे कम करें

  • रिपॉजिटरी का आकार: समय के साथ यह बहुत बड़ा हो सकता है। समाधान: .gitignore का उपयोग करें और बाइनरी आर्टिफैक्ट को स्टोर न करें।
  • CI सेटअप की जटिलता: केवल संशोधित मॉड्यूल को चलाने में सक्षम होना चाहिए। Bazel या Gradle Build Cache जैसे उपकरण मदद करते हैं।
  • लंबी कोड समीक्षा: यदि सभी परिवर्तन एक ही पुल-रिक्वेस्ट से गुजरते हैं। समाधान: branch policies और स्वचालित ट्रिगर का उपयोग करें।


Java के साथ मोनोरेपॉजिटरी की संरचना: व्यावहारिक उदाहरण



Maven का उपयोग करके Java मोनोरेपॉजिटरी के लिए एक विशिष्ट संरचना पर विचार करें। मान लें कि हमारे पास तीन मॉड्यूल हैं: core (सामान्य तर्क), service-api (REST API) और service-worker (पृष्ठभूमि प्रोसेसर)।



my-java-monorepo/├── pom.xml                    # पैरेंट POM├── core/│   ├── pom.xml│   └── src/│       └── main/java/com/example/core/│           └── Utils.java├── service-api/│   ├── pom.xml│   └── src/│       └── main/java/com/example/api/│           └── MainController.java├── service-worker/│   ├── pom.xml│   └── src/│       └── main/java/com/example/worker/│           └── WorkerTask.java└── .gitignore


पैरेंट POM (pom.xml)

प्रोजेक्ट के रूट में एक पैरेंट POM बनाया जाता है, जो संस्करणों का प्रबंधन करता है और मॉड्यूल को सूचीबद्ध करता है:



<project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0         http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.example</groupId>    <artifactId>my-java-monorepo</artifactId>    <version>1.0.0</version>    <packaging>pom</packaging>

<modules> <module>core</module> <module>service-api</module> <module>service-worker</module> </modules>

<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>3.2.0</version> <type>pom</type> <scope>import</scope>

ब्लॉग

पुस्तक अनुशंसाएँ