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

Maven构建Spring Boot项目Jar运行报错:JNI Error与类未找到

解决Spring Boot Jar运行时NoClassDefFoundError的问题

这个问题我碰过好多次了,核心原因很简单:你用Maven默认打包出来的Jar没有包含项目依赖的Thymeleaf类。IntelliJ运行项目时,会自动加载本地Maven仓库里的依赖库,所以不会出问题;但直接运行普通Jar的话,JVM找不到这些依赖类,自然就报NoClassDefFoundError了。

下面给你一步步的解决方法:

  • 第一步:确保pom.xml里配置了Spring Boot Maven插件
    Spring Boot的专属Maven插件会帮你构建一个包含所有依赖的「胖Jar」(Fat Jar),这才是能独立运行的Jar文件。打开你的pom.xml,检查<build>标签下的<plugins>是否包含以下配置:

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <!-- 如果你继承了spring-boot-starter-parent,这里可以不用写版本 -->
        <version>${spring-boot.version}</version>
        <executions>
            <execution>
                <goals>
                    <goal>repackage</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    

    要是之前没加这个插件,赶紧补上——这是最关键的一步。

  • 第二步:重新打包项目
    配置好插件后,打开终端(或者IntelliJ的Terminal),执行Maven命令重新打包:

    mvn clean package
    

    打包完成后,去项目的target目录看看,会生成两个Jar文件:一个是体积较小的普通Jar(比如your-app-1.0.0.jar),另一个是体积大很多的可执行Jar(有些版本会带-exec后缀,或者直接和普通Jar同名但大小差异明显)。你需要运行的是后者。

  • 第三步:检查Thymeleaf依赖的Scope
    确认你的Thymeleaf依赖没有被设置成provided或test范围——这两个范围的依赖不会被打包到Jar里。正常的Thymeleaf依赖应该是这样的:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
        <!-- 默认scope是compile,不需要手动指定 -->
    </dependency>
    

    要是不小心加了<scope>provided</scope>,赶紧删掉它。

  • 第四步:运行正确的Jar文件
    最后,用Java命令运行那个包含所有依赖的胖Jar:

    java -jar target/your-app-1.0.0.jar
    

    记得把your-app-1.0.0.jar换成你实际生成的文件名哦。

按照这些步骤操作后,应该就能正常运行Jar文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:26:56