Kotlin के साथ मोनोरिपॉजिटरी: व्यवहार में कोड का संगठन
आधुनिक सॉफ्टवेयर विकास में, मोनोरिपॉजिटरी (monorepo) और मल्टीरिपॉजिटरी (multirepo) के बीच चुनाव तेजी से आम होता जा रहा है। Kotlin प्रोजेक्ट्स के लिए, विशेष रूप से वे जो Kotlin Multiplatform या माइक्रोसर्विस आर्किटेक्चर का उपयोग करते हैं, मोनोरिपॉजिटरी एक शक्तिशाली उपकरण बन जाता है। इस लेख में, हम यह समझेंगे कि Kotlin में मोनोरिपॉजिटरी में कोड को ठीक से कैसे व्यवस्थित किया जाए, व्यावहारिक उदाहरण और सर्वोत्तम प्रथाओं पर विचार करेंगे जो आपको सामान्य गलतियों से बचने में मदद करेंगे।
मोनोरिपॉजिटरी क्या है और Kotlin में इसकी आवश्यकता क्यों है?
मोनोरिपॉजिटरी एक दृष्टिकोण है जिसमें प्रोजेक्ट का सारा कोड (या कई संबंधित प्रोजेक्ट) एक ही रिपॉजिटरी में संग्रहीत किया जाता है। Kotlin के संदर्भ में, इसमें शामिल हो सकता है:
- साझा लाइब्रेरी — उपयोगिताएँ, डेटा मॉडल, DTO.
- एप्लिकेशन मॉड्यूल — बैकएंड (Ktor, Spring), फ्रंटएंड (Kotlin/JS), मोबाइल एप्लिकेशन (Kotlin Multiplatform).
- स्क्रिप्ट और कॉन्फ़िगरेशन — CI/CD, Dockerfile, Gradle स्क्रिप्ट.
Kotlin प्रोजेक्ट्स के लिए मोनोरिपॉजिटरी के मुख्य लाभ:
- निर्भरताओं का एकीकृत संस्करण — सभी मॉड्यूल Kotlin और लाइब्रेरी के एक ही संस्करण का उपयोग करते हैं, जिससे विरोध का जोखिम कम होता है।
- सरलीकृत रिफैक्टरिंग — एक मॉड्यूल में API परिवर्तन तुरंत सभी आश्रितों में दिखाई देता है।
- CI/CD सेट अप करना आसान — सभी घटकों के लिए एक पाइपलाइन।
- पारदर्शिता — संपूर्ण कोडबेस एक स्थान पर उपलब्ध है।
हालाँकि, कमियाँ भी हैं: रिपॉजिटरी का आकार बढ़ सकता है, और क्लोनिंग का समय बढ़ जाता है। लेकिन मध्यम और बड़े Kotlin प्रोजेक्ट्स के लिए, मोनोरिपॉजिटरी अक्सर सबसे अच्छा समाधान साबित होता है।
मोनोरिपॉजिटरी की संरचना: व्यावहारिक टेम्पलेट
फ़ोल्डरों का उचित संगठन सफलता की नींव है। आइए Gradle का उपयोग करके Kotlin प्रोजेक्ट के लिए एक विशिष्ट संरचना पर विचार करें:
my-kotlin-monorepo/├── build.gradle.kts # रूट बिल्ड स्क्रिप्ट├── settings.gradle.kts # मॉड्यूल कॉन्फ़िगरेशन├── gradle.properties # सामान्य Gradle पैरामीटर├── gradle/│ └── libs.versions.toml # Version Catalog (अनुशंसित)├── modules/│ ├── common/ # साझा उपयोगिताएँ और मॉडल│ │ ├── build.gradle.kts│ │ └── src/│ ├── backend/ # Ktor पर बैकएंड सेवा│ │ ├── build.gradle.kts│ │ └── src/│ ├── android-app/ # Android एप्लिकेशन│ │ ├── build.gradle.kts│ │ └── src/│ └── web-client/ # Kotlin/JS क्लाइंट│ ├── build.gradle.kts│ └── src/├── scripts/ # सहायक स्क्रिप्ट│ └── deploy.sh└── docs/ # दस्तावेज़ीकरण └── architecture.mdफ़ाइल settings.gradle.kts मॉड्यूल को जोड़ती है:
rootProject.name = "my-kotlin-monorepo"
include(":modules:common")include(":modules:backend")include(":modules:android-app")include(":modules:web-client")रूट build.gradle.kts में, आप सामान्य प्लगइन और निर्भरताएँ सेट कर सकते हैं:
plugins { kotlin("jvm") version "1.9.22" apply false kotlin("multiplatform") version "1.9.22" apply false id("com.android.application") version "8.2.0" apply false}निर्भरता प्रबंधन: Version Catalog और Convention Plugins
मोनोरिपॉजिटरी में, निर्भरता संस्करणों के दोहराव से बचना महत्वपूर्ण है। इसके लिए Kotlin में Version Catalog (फ़ाइल libs.versions.toml) का उपयोग किया जाता है।
उदाहरण gradle/libs.versions.toml:
[versions]kotlin = "1.9.22"ktor = "2.3.7"coroutines = "1.8.0"
[libraries]kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" }ktor-server-core = { module = "io.k