Gradle项目运行时出现org.jooq.impl.DSL类未找到异常求助
解决
java.lang.NoClassDefFoundError: org/jooq/impl/DSL异常 问题原因
你执行./gradlew build生成的jar是瘦jar(thin jar),仅包含项目自身的编译代码,未打包任何依赖库(如jOOQ、DCM等)。使用java -jar启动时,JVM无法找到这些依赖类,因此抛出该异常。
解决方案:生成包含所有依赖的胖jar(Fat Jar)
最便捷的方式是通过Gradle的shadow插件生成包含所有依赖的胖jar,操作步骤如下:
1. 修改build.gradle配置
添加shadow插件并完善配置:
plugins { id 'java' // 引入shadow插件,版本可根据Gradle版本适配调整 id 'com.github.johnrengelman.shadow' version '7.1.2' } // 统一管理依赖版本,避免硬编码 ext { guavaVersion = '29.0-jre' junitJupiterVersion = '5.7.2' junitPioneerVersion = '1.4.2' } jar { manifest { attributes 'Main-Class': 'com.rebalancer.RebalancerExperiment' } } // 配置shadowJar任务,生成包含所有依赖的胖jar shadowJar { mergeServiceFiles() manifest { attributes 'Main-Class': 'com.rebalancer.RebalancerExperiment' } } repositories { mavenCentral() } dependencies { implementation 'com.vmware.dcm:dcm:0.15.0' implementation "org.jooq:jooq:3.13.1" implementation "org.jooq:jooq-meta:3.13.1" implementation "com.google.guava:guava:${guavaVersion}" implementation "org.junit.jupiter:junit-jupiter:${junitJupiterVersion}" implementation "org.junit-pioneer:junit-pioneer:${junitPioneerVersion}" } // 可选配置:执行build时自动生成胖jar build.dependsOn(shadowJar)
2. 构建并运行胖jar
- 执行构建命令:
./gradlew shadowJar - 生成的胖jar位于
build/libs/目录下,文件名格式为{项目名}-all.jar(例如rebalancer-all.jar) - 启动应用:
java -jar build/libs/{项目名}-all.jar
补充说明
- 你通过
./gradlew dependencies确认的依赖版本一致是正确的,版本冲突并非本次异常的诱因。 - 原
build.gradle中未定义guavaVersion等变量,添加ext块统一管理版本可避免潜在的构建报错。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

