Maven构建Spring Boot项目Jar运行报错:JNI Error与类未找到
这个问题我碰过好多次了,核心原因很简单:你用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

