Kotlin के साथ मोनोरेपोजिटरी का परिचय
आधुनिक जटिल अनुप्रयोगों का विकास अक्सर कोड प्रबंधन की समस्या का सामना करता है। मोनोरेपोजिटरी और मल्टीरेपोजिटरी के बीच चयन प्रमुख आर्किटेक्चरल निर्णयों में से एक है। इस लेख में हम सर्वोत्तम प्रथाओं और आधुनिक उपकरणों का उपयोग करके Kotlin के साथ मोनोरेपोजिटरी को कैसे व्यवस्थित करें, यह समझेंगे।
मोनोरेपोजिटरी (monorepo) एक दृष्टिकोण है जिसमें सभी प्रोजेक्ट, लाइब्रेरी और सेवाएं एक ही रेपोजिटरी में संग्रहीत होती हैं। Kotlin डेवलपर्स के लिए यह विशेष रूप से प्रासंगिक है क्योंकि इसमें शक्तिशाली Gradle बिल्ड सिस्टम और विभिन्न मॉड्यूल के बीच सामान्य कोड का उपयोग करने की क्षमता है।
Kotlin प्रोजेक्ट्स के लिए मोनोरेपोजिटरी के लाभ
संगठन पर जाने से पहले, Kotlin के लिए मोनोरेपोजिटरी के प्रमुख लाभों पर विचार करें:
- डिपेंडेंसी का एकीकृत संस्करण — सभी मॉड्यूल Kotlin, लाइब्रेरी और प्लगइन के एक ही संस्करण का उपयोग करते हैं, जिससे संस्करण विरोध समाप्त हो जाता है।
- सरलीकृत रिफैक्टरिंग — सामान्य लाइब्रेरी में परिवर्तन स्वचालित रूप से सभी आश्रित मॉड्यूल द्वारा जांचे जाते हैं।
- केंद्रीकृत कॉन्फ़िगरेशन — सामान्य Gradle सेटिंग्स, लिंटर्स और CI/CD एक बार कॉन्फ़िगर किए जाते हैं।
- परमाणु कमिट — विभिन्न मॉड्यूल में संबंधित परिवर्तन एक ही कमिट में किए जा सकते हैं।
- कोड का पुन: उपयोग — सामान्य उपयोगिताएँ, DTO और व्यावसायिक तर्क सभी प्रोजेक्ट्स के लिए आसानी से उपलब्ध हैं।
Kotlin और Gradle के साथ मोनोरेपोजिटरी की संरचना
Gradle Multi-Module का उपयोग करके Kotlin मोनोरेपोजिटरी के लिए इष्टतम निर्देशिका संरचना पर विचार करें:
my-monorepo/├── build.gradle.kts # रूट build फ़ाइल├── settings.gradle.kts # मॉड्यूल सेटिंग├── gradle.properties # सामान्य गुण├── gradle/│ └── libs.versions.toml # Version Catalog├── modules/│ ├── common/ # सामान्य उपयोगिताएँ और मॉडल│ ├── domain/ # व्यावसायिक तर्क│ ├── data/ # डेटा लेयर (API, DB)│ ├── service-a/ # माइक्रोसर्विस A│ ├── service-b/ # माइक्रोसर्विस B│ └── shared-test/ # सामान्य परीक्षण उपयोगिताएँ├── apps/│ ├── backend/ # मुख्य एप्लिकेशन│ └── cli-tool/ # CLI टूल└── config/ ├── checkstyle/ # लिंटर्स कॉन्फ़िगरेशन └── docker/ # सेवाओं के लिए Dockerfilesettings.gradle.kts सेट करना
फ़ाइल settings.gradle.kts प्रोजेक्ट के सभी मॉड्यूल को परिभाषित करती है:
rootProject.name = "my-monorepo"
// सभी मॉड्यूल शामिल करेंinclude( ":modules:common", ":modules:domain", ":modules:data", ":modules:service-a", ":modules:service-b", ":apps:backend", ":apps:cli-tool")
// संस्करण प्रबंधन के लिए प्लगइनpluginManagement { repositories { gradlePluginPortal() mavenCentral() }}Version Catalog का उपयोग (libs.versions.toml)
डिपेंडेंसी के केंद्रीकृत प्रबंधन के लिए हम gradle/libs.versions.toml का उपयोग करते हैं:
[versions]kotlin = "1.9.22"coroutines = "1.7.3"ktor = "2.3.7"exposed = "0.44.1"
[libraries]kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" }kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" }ktor-server-core = { module = "io.ktor:ktor-server-core", version.ref = "ktor" }exposed-core = { module = "org.jetbrains.exposed:exposed-core", version.ref = "exposed" }
[plugins]kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }common मॉड्यूल के लिए build.gradle.kts का उदाहरण
plugins { alias(libs.plugins.kotlin.jvm)}
depend
```