执行Scala打包JAR文件时遇ClassNotFoundException问题求助
Scala JAR运行报ClassNotFoundException的排查方案
核心原因及解决办法
- Scala标准库未被引入:Scala程序依赖Scala SDK的核心类库,你单独打包自己的class文件后,JVM找不到这些基础类。
解决:要么用scala命令替代java执行:scala -cp myjar1.jar mypgm;要么打包时将Scala依赖一并打入JAR——在IntelliJ的Artifact配置里,选择将依赖"Extract to the target JAR",或者用sbt的assembly插件完成胖包打包。 - 主类的完整包路径未指定:检查JAR内的目录结构,如果
mypgm.class实际在某个包下(比如代码开头有package com.myapp),那主类的完整名称应该是com.myapp.mypgm,而非仅mypgm。此时运行命令要改为java -cp myjar1.jar com.myapp.mypgm,同时MANIFEST.MF里的Main-Class也必须填写完整路径。 - MANIFEST.MF格式不符合要求:这个文件的格式非常严格,
Main-Class行必须是Main-Class: 主类名(冒号后必须有空格),且文件最后必须保留一行空行。如果格式错误,JVM会忽略主类配置。 - 打包时遗漏了其他依赖类:如果项目还有其他自定义模块或第三方库依赖,打包时未将这些内容加入JAR,也会触发类找不到的错误。检查IntelliJ的Artifact配置,确保所有必要的类和依赖都被包含。
- JDK版本不兼容:如果编译Scala代码用的JDK版本,和运行
java命令时用的JDK版本不一致(比如编译用JDK11,运行用JDK8),可能导致类加载失败。用java -version和javac -version确认版本匹配。
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

