परिचय: मोनोरेपॉजिटरी क्या है और Java में इसकी आवश्यकता क्यों है
Java विकास की दुनिया में, कोड संग्रहीत करने के दो मुख्य दृष्टिकोण हैं: मोनोरेपॉजिटरी (monorepo) और मल्टीरेपॉजिटरी (multirepo)। मोनोरेपॉजिटरी एक रणनीति है जिसमें प्रोजेक्ट के सभी कोड बेस (लाइब्रेरी, सेवाएँ, उपयोगिताएँ, कॉन्फ़िगरेशन) एक ही रेपॉजिटरी में संग्रहीत होते हैं। बड़े कॉर्पोरेट सिस्टम या माइक्रोसर्विसेज पर काम करने वाले Java डेवलपर्स के लिए, मोनोरेपॉजिटरी एक तेजी से लोकप्रिय समाधान बनता जा रहा है।
Java में मोनोरेपॉजिटरी के लाभ स्पष्ट हैं:
- डिपेंडेंसी का एकीकृत संस्करण: सभी मॉड्यूल लाइब्रेरी के एक ही संस्करण का उपयोग करते हैं, जिससे विरोध (classpath hell) समाप्त हो जाता है।
- सरलीकृत रिफैक्टरिंग: एक मॉड्यूल में API परिवर्तन तुरंत सभी आश्रित मॉड्यूल में दिखाई देता है।
- पूर्ण परिवर्तन इतिहास: एक कमिट में कई मॉड्यूल में परिवर्तन शामिल हो सकते हैं, जिससे डिबगिंग सरल हो जाती है।
- मानकीकरण: पूरे प्रोजेक्ट के लिए कोडस्टाइल, लिंटिंग और CI/CD के एकीकृत नियम।
हालाँकि, मोनोरेपॉजिटरी को उचित संगठन की आवश्यकता होती है। इस लेख में, हम चर्चा करेंगे कि Maven और Gradle का उपयोग करके मोनोरेपॉजिटरी में Java प्रोजेक्ट को सही तरीके से कैसे संरचित किया जाए।
मुख्य भाग: Java में मोनोरेपॉजिटरी का संगठन
1. निर्देशिका संरचना: मॉड्यूलर दृष्टिकोण
मोनोरेपॉजिटरी का आधार मॉड्यूलर संरचना है। प्रत्येक मॉड्यूल एक स्वतंत्र इकाई (लाइब्रेरी, सेवा, उपयोगिता) का प्रतिनिधित्व करता है। Java प्रोजेक्ट के लिए एक विशिष्ट संरचना पर विचार करें:
my-monorepo/├── build.gradle # रूट बिल्ड फ़ाइल (Gradle)├── settings.gradle # मॉड्यूल की सूची├── gradle.properties # सामान्य सेटिंग्स├── gradle/│ └── wrapper/├── common/ # सामान्य लाइब्रेरी│ ├── common-utils/ # उपयोगिताएँ (स्ट्रिंग, दिनांक)│ └── common-dto/ # डेटा आदान-प्रदान के लिए DTO├── services/ # माइक्रोसर्विसेज│ ├── user-service/ # उपयोगकर्ता सेवा│ └── order-service/ # ऑर्डर सेवा├── libs/ # आंतरिक लाइब्रेरी│ └── logging-lib/ # लॉगिंग लाइब्रेरी├── tests/ # एकीकरण/एंड-टू-एंड परीक्षण│ └── e2e-tests/└── buildSrc/ # सामान्य प्लगइन और कॉन्फ़िगरेशनप्रत्येक मॉड्यूल के अंदर मानक Maven/Gradle संरचना होती है:
user-service/├── build.gradle├── src/│ ├── main/│ │ ├── java/│ │ │ └── com/example/user/│ │ │ ├── controller/│ │ │ ├── service/│ │ │ └── repository/│ │ └── resources/│ │ └── application.yml│ └── test/│ └── java/└── Dockerfile2. डिपेंडेंसी प्रबंधन: Maven BOM और Gradle Version Catalog
मोनोरेपॉजिटरी की मुख्य समस्या डिपेंडेंसी संस्करणों का सिंक्रोनाइज़ेशन है। Java में इसे दो तरीकों से हल किया जाता है।
विकल्प 1: Maven BOM (Bill of Materials)
एक रूट POM बनाया जाता है जो सभी डिपेंडेंसी संस्करणों की घोषणा करता है। चाइल्ड मॉड्यूल dependencyManagement का उपयोग करते हैं:
<!-- pom.xml (रूट) --><dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>3.2.0</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.example</groupId> <artifactId>common-utils</artifactId> <version>1.0.0</version> </dependency> </dependencies></dependencyManagement>विकल्प 2: Gradle Version Catalog
फ़ाइल gradle/libs.versi में