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

基础Dagger项目出现NoClassDefFoundError: dagger/internal/Preconditions问题求助

解决Dagger 2 + Gradle运行时NoClassDefFoundError问题

你遇到的NoClassDefFoundError大概率是两个核心原因导致的:要么Dagger编译时自动生成的代码没被打包进你的Jar,要么运行时缺少必要的依赖支持。我给你一步步拆解解决方案:

1. 替换过时的APT插件,改用Gradle原生注解处理器支持

你当前使用的net.ltgt.apt插件已经比较老旧,Gradle从Java插件3.0版本开始就自带了注解处理器的原生支持,完全不需要额外插件。修改你的Gradle配置:

首先移除顶部的plugins { id "net.ltgt.apt" version "0.10" },然后把依赖部分调整为:

dependencies {
    // 用Gradle原生的annotationProcessor配置注解处理器
    annotationProcessor 'com.google.dagger:dagger-compiler:2.14.1'
    // 用implementation替代compile(Gradle 3.0+的标准依赖配置)
    implementation 'com.google.dagger:dagger:2.14.1'
}

这样Gradle会自动把Dagger生成的类(比如DaggerMain_Runner)纳入编译路径,打包时也会自动包含这些生成的代码。

2. 确保运行时依赖可用

你当前打包的Test.jar只包含自己编写的代码,没有包含Dagger的核心依赖。运行时有两种解决方式:

  • 方式一:手动指定classpath运行
    在命令行运行时,把Dagger的Jar包加到类路径中:
    # Windows系统用分号分隔路径
    java -cp "Test.jar;dagger-2.14.1.jar" test.Main
    # Linux/Mac系统用冒号分隔路径
    java -cp "Test.jar:dagger-2.14.1.jar" test.Main
    
  • 方式二:打包包含所有依赖的"胖Jar"
    如果想生成一个可以直接双击运行的独立Jar,推荐使用shadowJar插件:
    1. 在Gradle配置顶部添加插件:
      plugins {
          id 'java'
          id 'com.github.johnrengelman.shadow' version '7.1.2'
      }
      
    2. 配置shadowJar的主类和打包信息:
      shadowJar {
          manifest {
              attributes 'Implementation-Title': 'test',
                         'Implementation-Version': '1.0.0',
                         'Main-Class': 'test.Main'
          }
          archiveName 'Test.jar'
      }
      
    3. 执行./gradlew shadowJar命令,生成的Jar在build/libs/Test.jar,直接运行即可:
      java -jar Test.jar
      

3. 补全Main类中的Dagger组件初始化代码

你的Main类里Runner runner = ...部分未完成,Dagger会根据你的@Component注解自动生成DaggerMain_Runner类(前提是ServiceModule配置正确),补全代码示例:

public static void main(String[] args) {
    // 初始化Dagger自动生成的组件
    Runner runner = DaggerMain_Runner.create();
    ApplicationRunner appRunner = runner.runner();
    // 这里调用ApplicationRunner的业务方法,比如 appRunner.run();
}

另外要确保ServiceModule类存在,并且正确提供了ApplicationRunner的实例,否则Dagger无法生成对应的组件类,也会导致编译或运行时错误。

内容的提问来源于stack exchange,提问作者Samuel Amantea-Collins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:10:39