build文件夹已生成Dagger类,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. 清理缓存后重新构建
缓存可能导致类路径异常,执行以下步骤:
- 运行Gradle面板中的
app > Tasks > build > clean; - 运行
app > Tasks > build > build; - 再次运行
application > run。
4. 确认Java版本一致
确保VSCode使用的JDK和Gradle配置的Java 17一致:
- 按
Ctrl+Shift+P执行Java: Configure Java Runtime,检查项目的JDK版本是否为17。
内容的提问来源于stack exchange,提问作者Chaos

