Ktor集成jte时java.nio.file.Path不存在of()方法如何解决
问题原因
不存在任何第三方依赖或扩展文件为java.nio.file.Path定义of()扩展方法,该方法是Java 11及以上版本内置的Path类静态方法。报方法不存在的核心原因是项目当前编译/运行环境的Java版本低于11,常见场景如下:
- 本地使用的JDK版本为Java 8
- 构建工具(Gradle/Maven)中配置的Java编译目标版本、Kotlin
jvmTarget参数设置为1.8,即使本地安装了高版本JDK,编译阶段也会拦截高版本API的调用。
解决方法
二选一即可:
- 升级Java版本至11及以上
统一将本地JDK、项目构建配置中的Java版本、Kotlin编译目标版本调整为11+,即可正常调用Path.of()。 - 保持Java 8兼容,替换为低版本支持的API
Java 11中Path.of()的底层实现就是调用Java 7就已存在的Paths.get(),二者逻辑完全等价,替换步骤:- 新增导入
import java.nio.file.Paths - 将报错行替换为
val resolver = DirectoryCodeResolver(Paths.get("html"))
- 新增导入
修改后可正常运行的完整代码:
package com.example import io.ktor.server.engine.* import io.ktor.server.netty.* import com.example.plugins.* import gg.jte.TemplateEngine import gg.jte.resolve.DirectoryCodeResolver import io.ktor.server.application.* import io.ktor.server.jte.* import java.nio.file.Paths fun main() { embeddedServer(Netty, port = 8080, host = "0.0.0.0") { install(Jte) { val resolver = DirectoryCodeResolver(Paths.get("html")) templateEngine = TemplateEngine.create(resolver, gg.jte.ContentType.Html) } configureRouting() }.start(wait = true) }
内容的提问来源于stack exchange,提问作者Nikitiy
相关产品推荐
相关产品推荐

