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

Maven打包Spring Boot应用报错:无法找到或加载主类

问题原因与解决方案

核心问题

你用的maven-jar-plugin只能打包项目自身的编译后class文件,不会把Spring Boot等第三方依赖包一并打包进生成的Jar里。运行java -jar时,JVM找不到依赖的org.springframework.boot.CommandLineRunner类,所以抛出NoClassDefFoundError。

另外你手动打包的命令也有问题:jar cfm Melodify.jar Manifest.mf -C Melodify/src/main/java/ . 打包的是Java源文件(.java),不是编译后的字节码文件(.class),就算包含依赖也无法正常运行。

正确解决方案

用Spring Boot官方提供的spring-boot-maven-plugin,它会自动把所有依赖打包成一个可执行的"胖Jar",包含项目代码和所有第三方依赖类。

  1. 修改pom.xml,替换原有的maven-jar-plugin配置为:
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>3.2.0</version> <!-- 版本要和你的Spring Boot版本保持一致 -->
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <mainClass>bg.sofia.uni.fmi.melodify.MelodifyApplication</mainClass>
    </configuration>
</plugin>
  1. 重新打包:

    • 在IntelliJ的Maven视图中,执行clean和package目标(直接点击"package"即可)
    • 或者在项目根目录执行命令:mvn clean package
  2. 运行生成的Jar:
    打包完成后,target目录下会生成两个Jar文件:带.original后缀的是普通Jar,不带后缀的是可执行胖Jar。运行不带后缀的那个:

    java -jar target/melodify-xxx.jar
    

补充说明

  • Spring Boot的repackage目标会把普通Jar重新打包为可执行Jar,自动处理依赖打包和清单配置,不用手动编写Manifest.mf。
  • 如果你的pom.xml还没加Spring Boot父依赖,需要补上:
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.0</version> <!-- 与插件版本一致 -->
    <relativePath/>
</parent>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:23:14