जावा के साथ मोनोरिपॉजिटरी: व्यवहार में कोड संगठन

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

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

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

जावा के साथ मोनोरिपॉजिटरी: व्यवहार में कोड संगठन

\n

आधुनिक जावा-डेवलपमेंट में, मोनोरिपॉजिटरी (monorepo) और कई अलग-अलग रिपॉजिटरी के बीच चुनाव का सवाल तेजी से उठता है। मोनोरिपॉजिटरी एक दृष्टिकोण है जिसमें पूरे प्रोजेक्ट का कोड (कई सेवाएं, लाइब्रेरीज़, कॉन्फ़िगरेशन) एक ही Git-रिपॉजिटरी में संग्रहीत किया जाता है। इस लेख में, हम विश्लेषण करेंगे कि व्यवहार में जावा के साथ मोनोरिपॉजिटरी कैसे व्यवस्थित करें: फ़ोल्डर संरचना से लेकर बिल्ड और CI/CD सेटअप तक। आपको तैयार कोड उदाहरण और सिफारिशें मिलेंगी जो सामान्य गलतियों से बचने में मदद करेंगी।

\n\n

जावा के लिए मोनोरिपॉजिटरी क्यों?

\n

मोनोरिपॉजिटरी विशेष रूप से जावा प्रोजेक्ट्स के लिए उपयोगी है जहां कई मॉड्यूल एक-दूसरे पर निर्भर होते हैं। मुख्य लाभ:

\n
    \n
  • निर्भरताओं का एकीकृत संस्करण — सभी मॉड्यूल लाइब्रेरीज़ के एक ही संस्करण का उपयोग करते हैं, जो विरोध को समाप्त करता है।
  • \n
  • सरलीकृत रीफैक्टरिंग — एक मॉड्यूल में API परिवर्तन तुरंत सभी आश्रितों में दिखाई देता है।
  • \n
  • सामान्य बिल्ड कॉन्फ़िगरेशन — Gradle या Maven सभी मॉड्यूल के लिए एक बार कॉन्फ़िगर किए जाते हैं।
  • \n
  • CI/CD की अखंडता — सभी सेवाओं के लिए एक पाइपलाइन, परिवर्तनों को ट्रैक करना आसान है।
  • \n
\n

हालांकि, मोनोरिपॉजिटरी अनुशासन की मांग करता है: स्पष्ट संरचना के बिना, यह अराजकता में बदल जाता है। आइए उचित संगठन पर विचार करें।

\n\n

जावा प्रोजेक्ट के लिए मोनोरिपॉजिटरी संरचना

\n

जावा के साथ मोनोरिपॉजिटरी के लिए अनुशंसित संरचना (Gradle के उदाहरण पर):

\n
my-monorepo/\n├── build.gradle.kts          # रूट बिल्ड फ़ाइल\n├── settings.gradle.kts       # सभी मॉड्यूल शामिल करता है\n├── gradle.properties         # सामान्य गुण\n├── libs/                     # सामान्य लाइब्रेरीज़\n│   ├── common-utils/\n│   │   ├── build.gradle.kts\n│   │   └── src/\n│   └── logging/\n│       ├── build.gradle.kts\n│       └── src/\n├── services/                 # माइक्रोसर्विसेज़\n│   ├── user-service/\n│   │   ├── build.gradle.kts\n│   │   └── src/\n│   └── payment-service/\n│       ├── build.gradle.kts\n│       └── src/\n├── config/                   # कॉन्फ़िगरेशन (जैसे, checkstyle, spotbugs)\n│   └── checkstyle.xml\n└── docker/                   # प्रत्येक सेवा के लिए Dockerfile\n    ├── user-service.Dockerfile\n    └── payment-service.Dockerfile\n
\n

मुख्य सिद्धांत:

\n
    \n
  • मॉड्यूल को libs (लाइब्रेरीज़) और services (निष्पादन योग्य एप्लिकेशन) में विभाजित किया गया है।
  • \n
  • रूट build.gradle.kts सामान्य प्लगइन्स और संस्करण निर्धारित करता है।
  • \n
  • फ़ाइल settings.gradle.kts सभी उप-प्रोजेक्ट शामिल करती है।
  • \n
\n

settings.gradle.kts का उदाहरण:

\n
rootProject.name = "my-monorepo"\n\ninclude(\n    "libs:common-utils",\n    "libs:logging",\n    "services:user-service",\n    "services:payment-service"\n)\n
\n\n

मॉड्यूल के बीच निर्भरताएँ सेट करना

\n

मोनोरिपॉजिटरी का मुख्य कार्य आंतरिक निर्भरताओं का प्रबंधन करना है। एक उदाहरण पर विचार करें जहां user-service common-utils पर निर्भर है।

\n

चरण 1. रूट gradle.properties में संस्करण घोषित करें:

\n
# gradle.properties\nkotlinVersion=1.9.0\nspringBootVersion=3.2.0\ncommonUtilsVersion=1.0.0\n
\n

चरण 2. रूट build.gradle.kts में प्लगइन्स कनेक्ट करें और सामान्य सेटिंग्स निर्धारित करें:

\n
plugins {\n    id("java-library") apply false\n    id("org.springframework.boot") version "3.2.0" apply false\n    id("io.spring.dependency-management") version "1.1.4" apply false\n}\n\nallprojects {\n    group = "com.example"\n    version = "1.0.0"\n\n    repositories {\n        mavenCentral()\n    }\n}\n\nsubprojects {\n    apply(plugin = "java-library")\n\n    java {\n        sourceCompatibility = JavaVersion.VERSION_17\n        targetCompatibility = JavaVersion.VERSION_17\n    }\n\n    dependencies {\n        implementation("org.slf4j:slf4j-api:2.0.9")\n        testImplementation("org.j                

ब्लॉग

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