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,无需单独安装
小提示:如果你用的是Apple Silicon芯片的Mac,记得下载ARM64版本的JDK。我之前用x86版JDK跑Ktor,编译速度慢得离谱,换成ARM版后快了三倍。

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")
}
注意:Ktor版本和Kotlin版本需要匹配。我曾经因为用了Ktor 2.3.7 + Kotlin 1.8.0,结果编译时报了一堆奇怪的序列化错误。后来查文档才发现,Ktor 2.3.x要求Kotlin 1.9.x以上。所以建议你直接复制上面的版本号,别自己乱改。

2.3 Ktor项目初始化

有两种方式创建Ktor项目:

  • 方式一:在IntelliJ IDEA中直接新建项目,选择"Ktor"模板(Ultimate版自带)
  • 方式二:手动创建Gradle项目,然后添加Ktor依赖(我推荐这种方式,因为你能清楚知道每一步在干什么)

我个人更倾向方式二。为什么呢?因为用模板创建的项目,有时候会带一些你根本用不到的插件和配置,清理起来反而麻烦。手动搭建虽然多花5分钟,但你对项目结构了如指掌。

手动搭建的步骤:

  1. 在IDEA中新建Gradle项目,语言选Kotlin
  2. 把上面的 build.gradle.kts 内容复制进去
  3. 创建 src/main/kotlin/com/example/Application.kt
  4. 创建 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!
成功了! 你的第一个Ktor接口已经跑起来了。别看它简单,这背后包含了完整的HTTP请求处理链路——路由匹配、请求处理、响应返回。后面所有的复杂功能,都是在这个基础上扩展的。

2.5 本章知识体系

下面这张图帮你理清本章的核心逻辑:

开发环境搭建核心流程 IntelliJ IDEA + JDK 17 Gradle Kotlin DSL 项目初始化 编写 Application.kt + application.conf 运行 main() → 启动 Netty 服务器 浏览器访问 http://localhost:8080/hello

2.6 避坑指南

我在实际教学中发现,新手最容易在以下几个地方翻车:

  • 端口被占用:如果你本地已经跑了其他服务(比如Nginx、Docker),8080端口可能被占用了。可以用 lsof -i :8080 检查,或者换个端口比如8081。
  • Gradle Wrapper版本不对:项目根目录的 gradle/wrapper/gradle-wrapper.properties 里指定了Gradle版本。如果下载太慢,可以手动改成国内镜像。
  • Ktor版本号写错:我建议去 Ktor官网 复制最新的版本号,别凭记忆写。
我的习惯:每次新建Ktor项目,我都会先跑一个最简单的Hello World,确认环境没问题后,再开始加数据库、认证这些复杂功能。这样一旦出问题,我能快速定位是环境问题还是代码问题。

好了,环境搭好了,第一个接口也跑通了。接下来你就可以在这个基础上,尽情发挥你的创造力了。


公众号:蓝海资料掘金营,微信deep3321