परिचय: मोनोरिपॉजिटरी क्या है और Kotlin डेवलपर को इसकी आवश्यकता क्यों है
\n\nमोनोरिपॉजिटरी (monorepo) एक ऐसा दृष्टिकोण है जिसमें कई प्रोजेक्ट या मॉड्यूल का कोड एक ही रिपॉजिटरी में संग्रहीत किया जाता है। Kotlin के संदर्भ में यह विशेष रूप से सुविधाजनक है: आप सर्वर-साइड (Ktor), लाइब्रेरीज़, CLI-टूल और यहां तक कि मोबाइल ऐप (Kotlin Multiplatform) को एक एकल संरचना में जोड़ सकते हैं। शुरुआती डेवलपर्स के लिए, मोनोरिपॉजिटरी नेविगेशन, परीक्षण और सहयोग को सरल बनाता है।
\n\nइस लेख में, हम यह समझेंगे कि Gradle Multi-Project Build का उपयोग करके Kotlin के साथ मोनोरिपॉजिटरी कैसे व्यवस्थित करें। आप सीखेंगे कि फ़ोल्डर्स को सही ढंग से कैसे संरचित करें, निर्भरताएँ कैसे सेट करें और सामान्य गलतियों से कैसे बचें।
\n\nमुख्य भाग: Kotlin के साथ मोनोरिपॉजिटरी बनाना
\n\n1. मोनोरिपॉजिटरी संरचना: बुनियादी सिद्धांत
\n\nसही संरचना सफलता की कुंजी है। Kotlin मोनोरिपॉजिटरी में, प्रत्येक मॉड्यूल एक अलग Gradle उप-प्रोजेक्ट है। यहाँ एक विशिष्ट योजना है:
\n\nmy-monorepo/\n├── build.gradle.kts # रूट बिल्ड फ़ाइल\n├── settings.gradle.kts # मॉड्यूल सेटिंग\n├── gradle.properties # सामान्य गुण\n├── shared/ # साझा लाइब्रेरी (मॉड्यूल)\n│ ├── build.gradle.kts\n│ └── src/\n│ └── main/\n│ └── kotlin/\n│ └── com/example/shared/\n│ └── Utils.kt\n├── backend/ # सर्वर मॉड्यूल (Ktor)\n│ ├── build.gradle.kts\n│ └── src/\n│ └── main/\n│ └── kotlin/\n│ └── com/example/backend/\n│ └── Application.kt\n└── cli-tool/ # CLI टूल\n ├── build.gradle.kts\n └── src/\n └── main/\n └── kotlin/\n └── com/example/cli/\n └── Main.kt\n\nमुख्य नियम: एक मॉड्यूल - एक जिम्मेदारी। एक ही मॉड्यूल में व्यावसायिक तर्क और बुनियादी ढाँचे को न मिलाएँ। इससे कोड का परीक्षण और पुन: उपयोग सरल हो जाता है।
\n\n2. मोनोरिपॉजिटरी के लिए Gradle सेट करना
\n\nआइए रूट फ़ाइल settings.gradle.kts से शुरू करें। यह निर्धारित करता है कि प्रोजेक्ट में कौन से मॉड्यूल शामिल हैं:
// settings.gradle.kts\nrootProject.name = "my-monorepo"\n\ninclude(":shared")\ninclude(":backend")\ninclude(":cli-tool")\n\n// वैकल्पिक: include() के माध्यम से मॉड्यूल नाम सेट किए जा सकते हैं\n// include(":libs:utils") — यदि मॉड्यूल libs फ़ोल्डर में नेस्टेड है\n\nअब रूट build.gradle.kts। इसमें आमतौर पर केवल सामान्य सेटिंग्स (प्लगइन्स, रिपॉजिटरी) होती हैं और इसका अपना कोड नहीं होता:
// build.gradle.kts (रूट)\nplugins {\n kotlin("jvm") version "1.9.22" apply false\n id("application") apply false\n}\n\nallprojects {\n repositories {\n mavenCentral()\n }\n}\n\nsubprojects {\n apply(plugin = "kotlin")\n // सभी उप-प्रोजेक्ट के लिए सामान्य सेटिंग्स\n dependencies {\n implementation(kotlin("stdlib"))\n }\n}\n\napply false पर ध्यान दें - यह रूट प्रोजेक्ट पर प्लगइन के आवेदन को रोकता है। प्रत्येक मॉड्यूल स्वयं तय करता है कि उसे किन प्लगइन्स की आवश्यकता है।
3. मॉड्यूल का उदाहरण: साझा लाइब्रेरी (shared)
\n\nshared मॉड्यूल में पुन: प्रयोज्य फ़ंक्शन होंगे। इसका build.gradle.kts:
// shared/build.gradle.kts\nplugins {\n kotlin("jvm")\n}\n\ndependencies {\n // कोई आंतरिक निर्भरता नहीं - यह एक बुनियादी मॉड्यूल है\n testImplementation("org.jetbrains.kotlin:kotlin-test")\n}\n\nUtils.kt में कोड:
// shared/src/main/kotlin/com/example/shared/Utils.kt\npackage com.example.shared\n\nfun greet(name: String): String = "Hello, $name!"\n\nfun add(a: Int, b: Int): Int = a + b\n\nअब इस मॉड्यूल को अन्य मॉड्यूल से जोड़ा जा सकता है:
\n\n// backend/build.gradle.kts\nplugins {\n kotlin("jvm")\n id("application")\n}\n\ndependencies {\n implementation(project(