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

build文件夹已生成Dagger类,VSCode中无法导入运行

Dagger 2生成类无法被VSCode识别,运行时报错的解决方法

问题背景

正在学习Dagger 2教程,使用VSCode + build.gradle.kts开发。build文件夹已生成DaggerCommandRouterFactory等Dagger前缀类,但VSCode语言服务器无法识别,点击main函数的run按钮时提示DaggerCommandRouterFactory cannot be resolved错误。

build.gradle.kts配置

plugins {
    kotlin("jvm") version "1.7.10"
    kotlin("kapt") version "1.7.10"
    application
}

repositories {
    mavenCentral()
    google() // required for Dagger
}

application {
    mainClass.set("dagger.CommandLineAtm")
}

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>() {
    kotlinOptions.jvmTarget = "17"
}

java {
    toolchain.languageVersion.set(JavaLanguageVersion.of(17))
}

dependencies {

    val daggerVersion = "2.46.1"

    implementation("com.google.dagger:dagger:${daggerVersion}")
    implementation("javax.inject:javax.inject:1");
    implementation("org.junit.jupiter:junit-jupiter-api:5.5.1");

    kapt("com.google.dagger:dagger-compiler:${daggerVersion}")

    testImplementation("org.jetbrains.kotlin:kotlin-test:1.7.10")

}

kapt {
    mapDiagnosticLocations = true // include the Kotlin files into error reports
}

文件夹结构

- dagger
  - app
    - src/main
      - java/dagger
        - Command.java
        - CommandLineAtm.java
        - CommandRouter.java
        - CommandRouterFactory.java
        - Result.java
        - Status.java
    - build                              // Listing subset
      - generated
        - source
          - kapt
            - main/dagger
              - CommandRouter_Factory.java
              - DaggerCommandRouterFactory.java

操作及错误详情

  • 点击Gradle面板的build任务,构建成功;
  • 点击application > run任务,显示构建成功但程序未运行;
  • 点击CommandLineAtm中main函数上方的run按钮,抛出错误:

PS C:\Users\xyz\projects\dagger> c:; cd 'c:\Users\xyz\projects\dagger'; & 'C:\Users\xyz\AppData\Local\Programs\Eclipse Adoptium\jdk-17.0.7.7-hotspot\bin\java.exe' '@C:\Users\xyz\AppData\Local\Temp\cp_blvz7kxfufnzn162kc06ngftq.argfile' 'dagger.CommandLineAtm'
线程"main"中的异常 java.lang.Error: 未解决的编译问题:
DaggerCommandRouterFactory 无法解析

在 dagger.CommandLineAtm.main(CommandLineAtm.java:15)


解决方案

1. 让VSCode识别kapt生成的源码目录

VSCode的Java语言服务器默认不会自动把kapt生成的目录加入源码路径,手动配置:

  • 打开项目根目录下的.vscode/settings.json(没有则新建),添加:
{
    "java.project.sourcePaths": [
        "src/main/java",
        "build/generated/source/kapt/main"
    ]
}
  • 保存后,按Ctrl+Shift+P执行Java: Reload Project,让配置生效。

2. 通过Gradle任务启动程序

不要直接点击main函数的run按钮,改用Gradle的官方任务:

  • 在VSCode的Gradle面板中找到app > Tasks > application > run,双击运行。Gradle会自动处理生成类的编译路径,避免找不到类的问题。

3. 清理缓存后重新构建

缓存可能导致类路径异常,执行以下步骤:

  1. 运行Gradle面板中的app > Tasks > build > clean;
  2. 运行app > Tasks > build > build;
  3. 再次运行application > run。

4. 确认Java版本一致

确保VSCode使用的JDK和Gradle配置的Java 17一致:

  • 按Ctrl+Shift+P执行Java: Configure Java Runtime,检查项目的JDK版本是否为17。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:02:16