Kotlin के साथ मोनोरिपॉजिटरी: कोड संगठन और सर्वोत्तम अभ्यास

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

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

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

Kotlin के साथ मोनोरिपॉजिटरी: कोड संगठन और सर्वोत्तम अभ्यास



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



मोनोरिपॉजिटरी क्या है और इसकी आवश्यकता क्यों है?



मोनोरिपॉजिटरी एक दृष्टिकोण है जिसमें कई परियोजनाओं (मॉड्यूल, लाइब्रेरी, सेवाओं) का कोड एक ही रिपॉजिटरी में संग्रहीत किया जाता है। Kotlin के संदर्भ में, इसका मतलब है कि आपके पास एक सामान्य Gradle प्रोजेक्ट हो सकता है, जिसके अंदर backend सेवाओं, Android ऐप्स, सामान्य लाइब्रेरी और यहां तक कि दस्तावेज़ीकरण के लिए मॉड्यूल होते हैं।



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

  • एकीकृत संस्करण नियंत्रण — सभी मॉड्यूल Kotlin और सामान्य निर्भरताओं के एक ही संस्करण का उपयोग करते हैं।
  • सरलीकृत रीफैक्टरिंग — सामान्य लाइब्रेरी में परिवर्तन सभी उपभोक्ताओं को तुरंत दिखाई देते हैं।
  • साझा CI/CD कॉन्फ़िगरेशन — सभी मॉड्यूल के लिए एक ही पाइपलाइन।
  • बेहतर सहयोग — डेवलपर्स पूरे प्रोजेक्ट का कोड देख सकते हैं।


हालांकि, मोनोरिपॉजिटरी में अनुशासन की आवश्यकता होती है: उचित संगठन के बिना, यह उलझी हुई निर्भरताओं वाले "मोनोलिथ" में बदल सकता है। Kotlin और Gradle इससे निपटने के लिए उत्कृष्ट उपकरण प्रदान करते हैं।



Kotlin में मोनोरिपॉजिटरी की संरचना



एक विशिष्ट प्रोजेक्ट संरचना पर विचार करें, जहां Ktor पर एक backend सेवा, डेटा मॉडल के लिए एक सामान्य लाइब्रेरी और एक Android ऐप है:



my-monorepo/├── build.gradle.kts          # रूट बिल्ड फ़ाइल├── settings.gradle.kts       # मॉड्यूल को शामिल करना├── gradle.properties         # सामान्य संस्करण├── common/│   ├── build.gradle.kts│   └── src/│       └── main/kotlin/│           └── com/example/common/│               └── Models.kt├── backend/│   ├── build.gradle.kts│   └── src/│       └── main/kotlin/│           └── com/example/backend/│               └── Application.kt├── android-app/│   ├── build.gradle.kts│   └── src/│       └── main/kotlin/│           └── com/example/android/│               └── MainActivity.kt└── ci/    └── build.sh


फ़ाइल settings.gradle.kts मॉड्यूल को शामिल करती है:



rootProject.name = "my-monorepo"

include(":common")include(":backend")include(":android-app")


रूट build.gradle.kts में आमतौर पर केवल सामान्य प्लगइन और सेटिंग्स होती हैं:



plugins {    kotlin("jvm") version "1.9.22" apply false    kotlin("android") version "1.9.22" apply false    id("org.jetbrains.kotlin.plugin.serialization") version "1.9.22" apply false}

allprojects { group = "com.example" version = "1.0.0"}


महत्वपूर्ण: प्लगइन्स को apply false के साथ निर्दिष्ट किया जाता है ताकि वे रूट प्रोजेक्ट पर लागू न हों, बल्कि चाइल्ड मॉड्यूल के लिए उपलब्ध हों।



मोनोरिपॉजिटरी में निर्भरता प्रबंधन



मुख्य कार्यों में से एक निर्भरता संस्करणों के दोहराव से बचना है। इसके लिए Gradle Version Catalog (फ़ोल्डर gradle में फ़ाइल libs.versions.toml) का उपयोग किया जाता है। उदाहरण:



# gradle/libs.versions.toml[versions]kotlin = "1.9.22"ktor = "2.3.7"coroutines = "1.7.3"

[libraries]ktor-server-core = { module = "io.ktor:ktor-server-core", version.ref = "ktor" }ktor-server-netty = { module = "io.ktor:ktor-server-netty", version.ref = "ktor" }kotlinx-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" }

[plugins]kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.

ब्लॉग

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