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

Gradle构建Jar遇NoClassDefFoundError及主类找不到问题求助

问题排查与解决

第一个错误原因

默认的Gradle jar任务仅打包项目自身的编译代码,不会包含implementation配置下的第三方依赖,所以运行时找不到BouncyCastle的Selector类,你的推测完全正确。

第二个错误原因

你修改后的jar配置只添加了第三方依赖的内容,却遗漏了项目自身编译生成的class文件——默认的jar任务原本会自动打包sourceSets.main.output(即你自己写的代码编译产物),但自定义from时没有显式保留这部分,导致主类com.example.fileutil.FilePrepareApplication根本没被打进Jar包,自然找不到。

修复方案

方案1:手动修正Jar任务配置

调整jar任务,先确保包含自身代码,再引入依赖:

jar {
    duplicatesStrategy = DuplicatesStrategy.INCLUDE
    manifest {
        attributes(
            'Implementation-Version': '0.0.1-SNAPSHOT',
            'Main-Class': 'com.example.fileutil.FilePrepareApplication'
        )
    }
    // 先加入项目自身的编译产物
    from sourceSets.main.output
    // 再加入implementation依赖的内容
    from {
        configurations.implementation.setCanBeResolved(true)
        configurations.implementation.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

方案2:使用官方Shadow插件(更推荐)

手动配置Fat Jar容易踩坑,Gradle社区有成熟的shadow插件可以一键生成包含所有依赖的可执行Jar:

  1. 在build.gradle中引入插件:
plugins {
    id 'java'
    id 'com.github.johnrengelman.shadow' version '7.1.2' // 可替换为最新稳定版
}
  1. 配置主类:
shadowJar {
    manifest {
        attributes 'Main-Class': 'com.example.fileutil.FilePrepareApplication'
    }
}

执行命令./gradlew shadowJar后,生成的可执行Jar会在build/libs/目录下,名称为[项目名]-all.jar,直接运行该Jar即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:22:38