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

Maven多模块项目maven-assembly-plugin打包Jar缺失主类问题

报错信息

Could not find or load main class (module)

问题原因

主类未被打入Jar的核心原因共2点:

  1. 多模块Maven项目的根POM(父工程)默认packaging类型为pom,本身不存放业务源码,也不会产生编译后的class文件。将maven-assembly-plugin配置在根POM中执行打包时,插件默认只会收集当前根模块自身的编译产物和依赖,不会自动拉取两个子模块的编译结果纳入Jar包。
  2. 根POM的配置中没有将两个子模块声明为当前项目的编译期依赖,插件完全感知不到子模块的存在,最终打包时没有任何class文件可以纳入,就会出现Jar内仅存在Manifest.mf的情况。
解决方法

推荐按照Maven多模块项目的标准规范调整配置:

  • 将当前写在根POM中的maven-assembly-plugin完整配置,移动到主类所在的first-module模块下的pom.xml的build -> plugins节点中。
  • 在first-module的pom.xml中添加对second-module的依赖,保证工具类可以被正常识别打包:
<dependency>
    <groupId>你的项目groupId</groupId>
    <artifactId>second-module</artifactId>
    <version>${project.version}</version>
</dependency>
  • 执行打包命令时,在项目根目录运行:
    mvn clean package -pl first-module -am
    其中-pl first-module指定要构建的目标模块是first-module,-am参数会自动构建first-module依赖的其他关联模块(也就是second-module),避免依赖缺失报错。
  • 打包完成后,可执行Jar会生成在first-module/target目录下,使用jar tvf <Jar文件名>可以验证包内已经包含com/example/MyClass.class以及所有依赖类,此时执行java -jar <Jar文件名>即可正常运行,不会再抛出找不到主类的错误。

不推荐在根POM中直接配置打包插件:如果强行在根POM打包,需要额外在根POM中把两个子模块都声明为compile范围的依赖,这种方式违背了多模块父工程仅做版本管控、依赖统一管理的设计初衷,后续维护很容易出现依赖遗漏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:57:21