2、开发环境搭建:IntelliJ IDEA配置、Gradle Kotlin DSL配置、Ktor项目初始化、第一个Hello World接口
说实话,很多初学者在学Ktor时,第一步就被环境配置劝退了。我当年第一次接触Ktor时也踩了不少坑——IDEA版本不对、Gradle插件冲突、Ktor版本号记错……折腾了大半天才跑通第一个Hello World。所以这一章,我带你一步步把环境搭好,确保后面写代码时顺风顺水。
2.1 开发工具准备:IntelliJ IDEA
Ktor是JetBrains家的亲儿子,所以用IntelliJ IDEA开发是最舒服的。我个人习惯用Ultimate版,但Community版也完全够用。
| 工具 | 版本要求 | 备注 |
|---|---|---|
| IntelliJ IDEA | 2021.3+ | Community或Ultimate均可 |
| JDK | 11+(推荐17或21) | 建议用Amazon Corretto或Eclipse Temurin |
| Gradle | 7.5+(或使用Gradle Wrapper) | 项目自带Wrapper,无需单独安装 |
2.2 Gradle Kotlin DSL 配置
Ktor官方推荐用Gradle Kotlin DSL来构建项目。为什么?说白了,Kotlin DSL比Groovy DSL更安全、更智能——IDE补全、类型检查、重构支持都更好。你想想看,写build.gradle.kts时,IDE能帮你自动补全依赖版本,这体验多爽。
下面是我常用的项目结构:
my-ktor-app/
├── build.gradle.kts
├── settings.gradle.kts
├── gradle.properties
├── src/
│ └── main/
│ └── kotlin/
│ └── com/example/
│ └── Application.kt
└── resources/
└── application.conf
核心的 build.gradle.kts 文件长这样:
plugins {
kotlin("jvm") version "1.9.22"
kotlin("plugin.serialization") version "1.9.22"
id("io.ktor.plugin") version "2.3.7"
}
group = "com.example"
version = "1.0.0"
application {
mainClass.set("com.example.ApplicationKt")
}
repositories {
mavenCentral()
}
dependencies {
implementation("io.ktor:ktor-server-core:2.3.7")
implementation("io.ktor:ktor-server-netty:2.3.7")
implementation("io.ktor:ktor-server-content-negotiation:2.3.7")
implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7")
implementation("ch.qos.logback:logback-classic:1.4.14")
testImplementation("io.ktor:ktor-server-test-host:2.3.7")
testImplementation("org.jetbrains.kotlin:kotlin-test:1.9.22")
}
2.3 Ktor项目初始化
有两种方式创建Ktor项目:
- 方式一:在IntelliJ IDEA中直接新建项目,选择"Ktor"模板(Ultimate版自带)
- 方式二:手动创建Gradle项目,然后添加Ktor依赖(我推荐这种方式,因为你能清楚知道每一步在干什么)
我个人更倾向方式二。为什么呢?因为用模板创建的项目,有时候会带一些你根本用不到的插件和配置,清理起来反而麻烦。手动搭建虽然多花5分钟,但你对项目结构了如指掌。
手动搭建的步骤:
- 在IDEA中新建Gradle项目,语言选Kotlin
- 把上面的
build.gradle.kts内容复制进去 - 创建
src/main/kotlin/com/example/Application.kt - 创建
src/main/resources/application.conf
嗯,这里要注意 application.conf 的写法:
ktor {
deployment {
port = 8080
host = "0.0.0.0"
}
application {
modules = [ com.example.ApplicationKt.module ]
}
}
这个配置文件告诉Ktor:监听8080端口,允许所有IP访问(开发时方便),并且加载 ApplicationKt.module 这个函数作为入口。
2.4 第一个Hello World接口
终于到了写代码的环节。打开 Application.kt,输入以下内容:
package com.example
import io.ktor.server.engine.*
import io.ktor.server.netty.*
import io.ktor.server.routing.*
import io.ktor.server.response.*
import io.ktor.server.application.*
fun main() {
embeddedServer(Netty, port = 8080) {
module()
}.start(wait = true)
}
fun Application.module() {
routing {
get("/hello") {
call.respondText("Hello, Ktor!")
}
}
}
这段代码做了三件事:
- 用Netty作为底层服务器引擎
- 在8080端口启动服务
- 注册了一个GET路由,路径是
/hello,返回字符串
运行 main() 函数,控制台会输出类似这样的日志:
[main] INFO ktor.application - Autoreload is disabled
[main] INFO ktor.application - Application started in 0.234 seconds
[main] INFO ktor.application - Responding at http://0.0.0.0:8080
打开浏览器,访问 http://localhost:8080/hello,你会看到:
Hello, Ktor!
2.5 本章知识体系
下面这张图帮你理清本章的核心逻辑:
2.6 避坑指南
我在实际教学中发现,新手最容易在以下几个地方翻车:
- 端口被占用:如果你本地已经跑了其他服务(比如Nginx、Docker),8080端口可能被占用了。可以用
lsof -i :8080检查,或者换个端口比如8081。 - Gradle Wrapper版本不对:项目根目录的
gradle/wrapper/gradle-wrapper.properties里指定了Gradle版本。如果下载太慢,可以手动改成国内镜像。 - Ktor版本号写错:我建议去 Ktor官网 复制最新的版本号,别凭记忆写。
好了,环境搭好了,第一个接口也跑通了。接下来你就可以在这个基础上,尽情发挥你的创造力了。