使用Kotlin的单一代码库:面向初学者的代码组织

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:什么是单一代码库,为什么Kotlin开发者需要它



单一代码库(monorepo)是一种将多个项目或模块的代码存储在一个仓库中的方法。在Kotlin的上下文中,这尤其方便:您可以将服务器端(Ktor)、库、CLI工具甚至移动应用程序(Kotlin Multiplatform)统一到一个结构中。对于初学者开发者来说,单一代码库简化了导航、测试和协作。



在本文中,我们将探讨如何使用Gradle多项目构建来组织使用Kotlin的单一代码库。您将学习如何正确构建文件夹结构、配置依赖关系以及避免常见错误。



主体部分:创建使用Kotlin的单一代码库



1. 单一代码库的结构:基本原则



正确的结构是成功的关键。在Kotlin单一代码库中,每个模块都是一个独立的Gradle子项目。以下是典型的方案:



my-monorepo/├── build.gradle.kts          # 根构建文件├── settings.gradle.kts       # 模块配置├── gradle.properties         # 公共属性├── shared/                   # 公共库(模块)│   ├── build.gradle.kts│   └── src/│       └── main/│           └── kotlin/│               └── com/example/shared/│                   └── Utils.kt├── backend/                  # 服务器模块(Ktor)│   ├── build.gradle.kts│   └── src/│       └── main/│           └── kotlin/│               └── com/example/backend/│                   └── Application.kt└── cli-tool/                 # CLI工具    ├── build.gradle.kts    └── src/        └── main/            └── kotlin/                └── com/example/cli/                    └── Main.kt


关键规则:一个模块——一个职责。不要将业务逻辑和基础设施混合在同一个模块中。这简化了测试和代码复用。



2. 为单一代码库配置Gradle



我们从根文件settings.gradle.kts开始。它定义了哪些模块属于项目:



// settings.gradle.ktsrootProject.name = "my-monorepo"

include(":shared")include(":backend")include(":cli-tool")

// 可选:可以通过include()设置模块名称// include(":libs:utils") — 如果模块嵌套在libs文件夹中


现在是根build.gradle.kts。它通常只包含公共设置(插件、仓库),没有自己的代码:



// build.gradle.kts (根)plugins {    kotlin("jvm") version "1.9.22" apply false    id("application") apply false}

allprojects { repositories { mavenCentral() }}

subprojects { apply(plugin = "kotlin") // 所有子项目的公共设置 dependencies { implementation(kotlin("stdlib")) }}


注意apply false——这可以防止插件应用于根项目。每个模块自行决定需要哪些插件。



3. 模块示例:公共库(shared)



shared模块将包含可复用的函数。它的build.gradle.kts:



// shared/build.gradle.ktsplugins {    kotlin("jvm")}

dependencies { // 没有内部依赖——这是一个基础模块 testImplementation("org.jetbrains.kotlin:kotlin-test")}


Utils.kt中的代码:



// shared/src/main/kotlin/com/example/shared/Utils.ktpackage com.example.shared

fun greet(name: String): String = "Hello, $name!"

fun add(a: Int, b: Int): Int = a + b


现在这个模块可以连接到其他模块:



// backend/build.gradle.ktsplugins {    kotlin("jvm")    id("application")}

dependencies { implementation(project(

博客

书籍推荐