使用maven-assembly-plugin生成可执行JAR时遇主类加载失败问题求助
解决Maven Assembly Plugin生成可执行JAR时找不到主类的问题
看起来你遇到的核心问题是生成的可执行JAR无法找到指定主类,另外需要说明的是:可执行JAR不需要包含源代码,只需要编译后的.class文件,所以“未包含源代码”是正常情况,不用纠结这个点。下面一步步帮你排查和解决主类找不到的问题:
第一步:确认基础配置与项目结构
先把最容易踩的坑排除:
- 检查主类路径是否正确:你的主类文件应该放在
src/main/java/com/som/bau/report/MainClass.java,类名和代码里的定义完全一致(Java是大小写敏感的,别写错字母大小写)。 - 执行
mvn clean compile命令,查看target/classes/com/som/bau/report/目录下是否生成了MainClass.class文件。如果没有,说明编译阶段有错误,先解决编译问题再进行打包操作。
第二步:修正Maven Assembly Plugin的POM配置
你当前的问题大概率是插件没有正确绑定Maven生命周期,或者没明确指定主类。推荐把插件绑定到package阶段,同时配置好主类和依赖打包规则。在你的POM.xml的<build>节点下添加如下配置:
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <!-- 使用最新稳定版本,避免旧版本的兼容性问题 --> <configuration> <!-- 配置Manifest文件,指定主类全限定名 --> <archive> <manifest> <mainClass>com.som.bau.report.MainClass</mainClass> <!-- 可选:自动添加类路径,避免依赖找不到的问题 --> <addClasspath>true</addClasspath> </manifest> </archive> <!-- 使用官方预设规则,打包项目class文件+所有依赖到一个JAR --> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>build-executable-jar</id> <!-- 绑定到package阶段,执行mvn clean package时自动生成可执行JAR --> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins>
第三步:正确执行打包命令
之前你单独执行mvn clean package assembly:single,这种方式可能因为插件未绑定生命周期,导致编译后的class文件没被正确纳入JAR。现在用配置好的POM,只需要执行:
mvn clean package
执行完成后,在target目录下会生成两个JAR:一个是普通的项目JAR,另一个是带-jar-with-dependencies后缀的可执行JAR,这个就是你需要的可运行文件。
第四步:验证JAR内容(如果仍有问题)
如果还是报错,解压生成的可执行JAR,检查两个关键点:
- 是否存在
com/som/bau/report/MainClass.class文件; - 查看
META-INF/MANIFEST.MF文件,是否包含Main-Class: com.som.bau.report.MainClass这一行。
如果这两个都没问题,执行java -jar your-project-jar-with-dependencies.jar应该就能正常运行了。
内容的提问来源于stack exchange,提问作者Manish Rajput
相关产品推荐
相关产品推荐

