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

无构建工具项目打包Executable Jar遇NoClassDefFoundError求助

解决未用构建工具的Java项目打包时依赖类缺失问题

方法一:用IntelliJ IDEA打包成包含所有依赖的Fat Jar

这是最省心的方式,直接通过IDE配置完成:

  • 打开File → Project Structure → Artifacts
  • 点击左上角的+号,选择JAR → From modules with dependencies
  • 在弹出的窗口中,选中你的项目主类(Main Class),然后勾选下方的Extract to the target JAR选项(这个选项会把依赖Jar里的类解压后合并到最终生成的Jar中)
  • 确认输出路径后点击OK
  • 最后点击顶部菜单栏的Build → Build Artifacts,选择对应的Artifact执行Build,生成的Jar就是包含所有依赖的可执行Jar

方法二:手动合并依赖类到项目Jar

如果不想用IDE的Artifact功能,可以手动操作:

  • 先把自己项目编译后的class文件打包成基础Jar(比如命名为my-project.jar)
  • 将jjwt-api.jar、jjwt-impl.jar、jjwt-jackson.jar这三个依赖Jar分别解压,把里面的class文件全部复制到项目class文件的目录结构下(保持包路径一致)
  • 用jar命令重新打包,命令示例:
    jar cvfm my-executable.jar manifest.xml -C 你的class文件目录 .
    
  • 注意manifest.xml里必须指定主类,格式如下:
    Main-Class: com.yourpackage.YourMainClass
    

方法三:用jar命令批量合并依赖

和方法二类似,但用命令行批量处理:

  • 创建一个临时目录(比如temp),把项目编译后的所有class文件复制到这个目录里
  • 依次执行命令解压每个依赖Jar到临时目录:
    jar xf lib/jjwt-api.jar -C temp
    jar xf lib/jjwt-impl.jar -C temp
    jar xf lib/jjwt-jackson.jar -C temp
    
  • 最后用jar命令打包临时目录里的所有文件:
    jar cvfm my-app.jar manifest.xml -C temp .
    

补充说明

之前你尝试的Class-Path配置没生效,是因为这个配置只是告诉JVM去哪里找外部依赖Jar,要求这些依赖Jar必须和你的可执行Jar放在同一目录(或者配置正确的相对/绝对路径)。如果想把所有依赖类都打包进一个Jar里,就必须用上面的方法将依赖类合并到最终Jar中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:08:22