You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ktor示例项目构建失败求助:Java编译器未找到及依赖兼容问题

Ktor项目构建失败问题排查与修复

问题背景

刚接触Ktor,按照官方教程构建示例项目,在解压步骤执行./gradlew build时多次失败,出现两类错误,且未修改项目生成器的默认配置。

出现的错误

错误1:找不到Java编译器

./gradlew build

FAILURE: Build failed with an exception.

* What went wrong:
org.gradle.api.internal.catalog.GeneratedClassCompilationException: No Java compiler found, please ensure you are running Gradle with a JDK
> No Java compiler found, please ensure you are running Gradle with a JDK

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

错误2:依赖版本不兼容

./gradlew build

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'ktor-sample-app'.
> Could not resolve all files for configuration ':classpath'.
   > Could not resolve io.ktor.plugin:plugin:3.1.3.
     Required by:
         project : > io.ktor.plugin:io.ktor.plugin.gradle.plugin:3.1.3
      > No matching variant of io.ktor.plugin:plugin:3.1.3 was found. The consumer was configured to find a library for use during runtime, compatible with Java 8, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '8.4' but:
          - Variant 'apiElements' capability io.ktor.plugin:plugin:3.1.3 declares a library, packaged as a jar, and its dependencies declared externally:
              - Incompatible because this component declares a component for use during compile-time, compatible with Java 11 and the consumer needed a component for use during runtime, compatible with Java 8
              - Other compatible attribute:
                  - Doesn't say anything about org.gradle.plugin.api-version (required '8.4')
          - Variant 'javadocElements' capability io.ktor.plugin:plugin:3.1.3 declares a component for use during runtime, and its dependencies declared externally:
              - Incompatible because this component declares documentation and the consumer needed a library
              - Other compatible attributes:
                  - Doesn't say anything about its target Java version (required compatibility with Java 8)
                  - Doesn't say anything about its elements (required them packaged as a jar)
                  - Doesn't say anything about org.gradle.plugin.api-version (required '8.4')
          - Variant 'runtimeElements' capability io.ktor.plugin:plugin:3.1.3 declares a library for use during runtime, packaged as a jar, and its dependencies declared externally:
              - Incompatible because this component declares a component, compatible with Java 11 and the consumer needed a component, compatible with Java 8
              - Other compatible attribute:
                  - Doesn't say anything about org.gradle.plugin.api-version (required '8.4')
          - Variant 'sourcesElements' capability io.ktor.plugin:plugin:3.1.3 declares a component for use during runtime, and its dependencies declared externally:
              - Incompatible because this component declares documentation and the consumer needed a library
              - Other compatible attributes:
                  - Doesn't say anything about its target Java version (required compatibility with Java 8)
                  - Doesn't say anything about its elements (required them packaged as a jar)
                  - Doesn't say anything about org.gradle.plugin.api-version (required '8.4')

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

BUILD FAILED in 1m 28s

本地环境信息

  • Java版本:
    javac -version
    javac 1.8.0_161
    
    java version "1.8.0_181"
    Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
    
  • Kotlin版本:
    kotlin -version
    Kotlin version 2.1.21-release-317 (JRE 1.8.0_181-b13)
    
  • Gradle版本:
    gradle --version
    
    Welcome to Gradle 8.14.1!
    
    Here are the highlights of this release:
     - Java 24 support
     - GraalVM Native Image toolchain selection
     - Enhancements to test reporting
     - Build Authoring improvements
    
    For more details see https://docs.gradle.org/8.14.1/release-notes.html
    
    
    ------------------------------------------------------------
    Gradle 8.14.1
    ------------------------------------------------------------
    
    Build time:    2025-05-22 13:44:09 UTC
    Revision:      c174b82566a79e3575bac8c7648c7b36cd815e94
    
    Kotlin:        2.0.21
    Groovy:        3.0.24
    Ant:           Apache Ant(TM) version 1.10.15 compiled on August 25 2024
    Launcher JVM:  1.8.0_181 (Oracle Corporation 25.181-b13)
    Daemon JVM:    /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home (no JDK specified, using current Java home)
    OS:            Mac OS X 10.16 x86_64
    

项目配置文件(gradle/libs.version.toml)

[versions]
kotlin-version = "2.1.10"
ktor-version = "3.1.3"
logback-version = "1.4.14"

[libraries]
ktor-server-core = { module = "io.ktor:ktor-server-core-jvm", version.ref = "ktor-version" }
ktor-server-netty = { module = "io.ktor:ktor-server-netty", version.ref = "ktor-version" }
logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback-version" }
ktor-server-config-yaml = { module = "io.ktor:ktor-server-config-yaml", version.ref = "ktor-version" }
ktor-server-test-host = { module = "io.ktor:ktor-server-test-host", version.ref = "ktor-version" }
kotlin-test-junit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin-version" }

[plugins]
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin-version" }
ktor = { id = "io.ktor.plugin", version.ref = "ktor-version" }

问题分析与修复方案

核心问题

  1. Java版本不兼容:Ktor 3.x和Kotlin 2.x最低要求Java 11,当前使用的Java 8不符合要求,导致依赖解析失败。
  2. Gradle daemon使用的JDK异常:Gradle daemon使用的是Java插件路径的JRE,而非安装的JDK,导致找不到Java编译器。

修复步骤

  1. 升级Java到11及以上版本

    • 下载并安装OpenJDK 11或更高版本(推荐LTS版本)。
    • 配置环境变量,确保JAVA_HOME指向新安装的JDK目录,且PATH中优先使用该JDK的bin目录。
    • 验证:执行javac -version和java -version确认版本为11+。
  2. 修正Gradle的JDK配置

    • 在项目根目录下创建或编辑gradle.properties文件,添加以下配置:
      org.gradle.java.home=/path/to/your/jdk11+
      
      替换/path/to/your/jdk11+为实际的JDK安装路径,比如Mac上可能是/Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home。
    • 或者通过命令行临时指定JDK运行Gradle:
      ./gradlew build -Dorg.gradle.java.home=/path/to/your/jdk11+
      
  3. 验证项目配置

    • 当前libs.version.toml中的Kotlin和Ktor版本匹配(Ktor 3.1.3兼容Kotlin 2.1.x),无需修改。
  4. 清理并重新构建

    • 执行以下命令清理缓存并重新构建:
      ./gradlew clean build --refresh-dependencies
      

内容的提问来源于stack exchange,提问作者user6432201

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 02:14:50