面试题答案
一键面试- 项目结构:
- 首先创建项目目录结构,假设项目根目录为
myProject
,在其中创建core
和ui
两个子目录,分别代表核心模块和UI模块。 - 项目结构大致如下:
- 首先创建项目目录结构,假设项目根目录为
myProject
├── core
│ ├── build.gradle.kts
│ └── src
│ └── main
│ └── kotlin
└── ui
├── build.gradle.kts
└── src
└── main
└── kotlin
- 根目录
build.gradle.kts
配置:- 在项目根目录的
build.gradle.kts
文件中,定义settings.gradle.kts
中引入的模块,示例如下:
- 在项目根目录的
plugins {
`kotlin - multiplatform`
}
subprojects {
apply(plugin = "kotlin - jvm")
repositories {
mavenCentral()
}
}
- 这里应用了
kotlin - multiplatform
插件,并且为所有子项目应用kotlin - jvm
插件,同时配置了mavenCentral
仓库。
settings.gradle.kts
配置:- 在
settings.gradle.kts
文件中,包含需要构建的模块:
- 在
rootProject.name = "myProject"
include("core", "ui")
- 核心模块
core/build.gradle.kts
配置:- 核心模块可能有自己独立的依赖,例如:
dependencies {
implementation(kotlin("stdlib - jdk8"))
// 其他依赖
}
- 这里引入了
kotlin - stdlib - jdk8
依赖,可根据实际需求添加其他依赖。
- UI模块
ui/build.gradle.kts
配置:- UI模块如果依赖核心模块,添加如下依赖:
dependencies {
implementation(project(":core"))
implementation(kotlin("stdlib - jdk8"))
// 其他UI相关依赖
}
- 通过
implementation(project(":core"))
表示依赖核心模块,同时也可添加其他UI相关的依赖。
- 确保独立且正确构建:
- 独立构建:
- 由于Gradle的特性,每个模块都有自己独立的
build.gradle.kts
文件,定义了自身的依赖和构建配置。在构建时,Gradle会根据依赖关系依次构建每个模块。例如,当构建ui
模块时,Gradle会先确保core
模块已构建完成,如果core
模块没有变化,Gradle会复用之前的构建结果,从而实现模块的独立构建。
- 由于Gradle的特性,每个模块都有自己独立的
- 正确构建:
- 依赖解析:通过明确在每个模块的
build.gradle.kts
中定义依赖,Gradle会从指定的仓库(如mavenCentral
)下载依赖,确保依赖的准确性。 - 构建顺序:Gradle会自动根据模块间的依赖关系确定构建顺序,例如
ui
依赖core
,Gradle会先构建core
,再构建ui
,保证构建的正确性。 - 版本一致性:在根目录的
build.gradle.kts
中可以通过ext
属性来统一管理依赖版本,避免不同模块使用同一依赖的不同版本导致的兼容性问题。例如:
- 依赖解析:通过明确在每个模块的
- 独立构建:
ext {
kotlinVersion = "1.6.21"
}
subprojects {
apply(plugin = "kotlin - jvm")
repositories {
mavenCentral()
}
dependencies {
implementation(kotlin("stdlib - jdk8", kotlinVersion))
}
}
这样所有子项目使用的Kotlin标准库版本就统一了。