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

使用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,检查两个关键点:

  1. 是否存在com/som/bau/report/MainClass.class文件;
  2. 查看META-INF/MANIFEST.MF文件,是否包含Main-Class: com.som.bau.report.MainClass这一行。

如果这两个都没问题,执行java -jar your-project-jar-with-dependencies.jar应该就能正常运行了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:10:51