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

Scala项目IntelliJ构建JAR运行提示找不到主类问题求助

问题根因

你的JAR构建配置存在两个直接导致报错的错误:

  • 你手动修改了Manifest文件的输出路径到resources目录,违反了JVM对可执行JAR的规范要求:JVM只会读取JAR包内META-INF/MANIFEST.MF路径下的Manifest配置,你放到resources目录的Manifest文件打包后不在指定路径,等于Main-Class配置完全没生效。
  • 手动填写Main-Class+未确认class文件打包路径:Scala的单例object编译后会生成superSimpleTest.class和superSimpleTest$.class两个文件,手动写Main-Class很容易出现识别偏差;同时你修改Manifest路径的操作大概率也导致构建时没有把编译生成的class文件放到JAR的正确路径下,JVM根本找不到对应的类。
修复步骤
  1. 先删除你之前放到resources目录下的MANIFEST.MF文件,避免旧文件引发打包冲突。
  2. 重新配置IntelliJ的JAR构建规则:
  • 进入File -> Project Structure -> Artifacts,删除之前创建的错误JAR配置,点击+ -> JAR -> From modules with dependencies
  • 弹出配置窗口后:
    • 选择测试代码所在的对应Module
    • 点击Main Class右侧的浏览按钮,在类列表中直接选中superSimpleTest,不要手动输入类名,IDE会自动识别Scala入口类的正确配置
    • 保持Manifest默认输出路径为src/META-INF,不要修改到resources或者其他目录
    • 最小测试场景下选择"extract to the target JAR"即可,后续打Spark任务包时再调整依赖打包规则
  1. 保存配置后,执行Build -> Build Artifacts,先选择Clean清理旧构建产物,再选择Build重新打包。
  2. 打包完成后先做校验:执行命令jar tf 你的JAR文件名.jar,确认输出内容中包含META-INF/MANIFEST.MF、superSimpleTest.class、superSimpleTest$.class三个条目,再执行java -jar 你的JAR文件名.jar即可正常运行。
Spark打包额外提示

后续打包提交到Spark集群的任务JAR时,记得把Scala标准库、Spark核心依赖的级别设置为Provided,不要把这些依赖打进JAR包,避免和集群预装的依赖版本冲突报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:39:17