IntelliJ构建含外部依赖的可执行JAR后运行报错求助
解决方案
问题根源
你打包的JAR没有包含gson依赖类,导致运行时JVM找不到对应的类文件。用Gradle管理的项目,更推荐用Gradle自带或官方插件来处理打包,比IDEA手动配置Artifacts更可靠。
方案一:构建包含所有依赖的"胖JAR"(推荐)
使用Shadow插件将项目代码和所有依赖打包到同一个JAR中:
- 修改项目根目录的
build.gradle(Groovy语法)或build.gradle.kts(Kotlin语法):// build.gradle 示例 plugins { id 'java' id 'com.github.johnrengelman.shadow' version '8.1.1' } repositories { mavenCentral() } dependencies { implementation 'com.google.code.gson:gson:2.10.1' } shadowJar { // 替换成你的主类全限定名,比如 com.example.MyConsoleMain manifest { attributes 'Main-Class': '你的主类完整路径' } }// build.gradle.kts 示例 plugins { java id("com.github.johnrengelman.shadow") version "8.1.1" } repositories { mavenCentral() } dependencies { implementation("com.google.code.gson:gson:2.10.1") } tasks.shadowJar { manifest { attributes(mapOf("Main-Class" to "你的主类完整路径")) } } - 执行打包命令:
- Linux/Mac:
./gradlew shadowJar - Windows:
gradlew.bat shadowJar
- Linux/Mac:
- 运行生成的JAR:
打包好的JAR在build/libs/目录下,命名格式为[项目名]-all.jar,执行:java -jar build/libs/[项目名]-all.jar
方案二:生成带依赖的可执行目录
如果不想打胖JAR,可使用Gradle Application插件生成包含依赖和运行脚本的目录:
- 修改构建脚本:
// build.gradle 示例 plugins { id 'java' id 'application' } repositories { mavenCentral() } dependencies { implementation 'com.google.code.gson:gson:2.10.1' } application { // 替换成你的主类全限定名 mainClass.set('你的主类完整路径') } - 生成可执行包:
- Linux/Mac:
./gradlew installDist - Windows:
gradlew.bat installDist
- Linux/Mac:
- 运行程序:
生成的文件在build/install/[项目名]/bin/目录下,直接运行对应脚本:- Linux/Mac:
./build/install/[项目名]/bin/[项目名] - Windows:
build\install\[项目名]\bin\[项目名].bat
- Linux/Mac:
若坚持用IDEA Artifacts打包
检查以下配置:
- 在Artifacts配置界面,确保
gson的依赖JAR被添加到输出目录的lib文件夹 - 编辑MANIFEST.MF,在
Class-Path属性中添加lib/gson-[版本号].jar(路径需和运行时依赖的位置一致)
内容的提问来源于stack exchange,提问作者rickmune
相关产品推荐
相关产品推荐

