Spring Boot+Vaadin打包Jar运行报错:无法创建FormService Bean
问题解决:Spring Boot + Vaadin打包Jar后启动无法找到JPA Repository Bean
问题概述
项目在IntelliJ IDEA中运行正常,但打包为Jar后用java -jar启动时抛出No qualifying bean of type 'ir.ic.vatest.db.FormRepository' available异常,导致Spring上下文初始化失败。
解决方案
1. 修正启动命令
你启动Jar时额外添加的fully.qualified.package.Application参数完全多余,Spring Boot可执行Jar已内置主类配置,直接执行:
java -jar vatest.jar
2. 清理重复依赖
pom.xml中重复引入了spring-boot-devtools,该依赖在生产打包场景下可能引发类加载冲突,删除其中一处重复配置:
<!-- 删除以下重复的devtools依赖 --> <!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> -->
3. 显式指定JPA扫描范围
虽然@SpringBootApplication默认扫描启动类所在包及其子包,但显式声明扫描范围可避免打包时的扫描偏差,修改启动类:
package ir.ic.vatest; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.boot.autoconfigure.domain.EntityScan; @SpringBootApplication @EnableJpaRepositories(basePackages = "ir.ic.vatest.db") @EntityScan(basePackages = "ir.ic.vatest.db") public class VatestApplication { public static void main(String[] args) { SpringApplication.run(VatestApplication.class, args); } }
4. 使用正确的Maven打包命令
如果是生产环境打包,必须激活production profile以确保Vaadin前端资源正确构建:
mvn clean package -Pproduction
测试打包直接执行:
mvn clean package
5. 验证Jar包内容
打包完成后解压Jar,检查以下内容是否存在:
BOOT-INF/classes/ir/ic/vatest/db/目录下有FormRepository.class和Forms.class文件BOOT-INF/lib目录下包含spring-boot-starter-data-jpa相关依赖包
内容的提问来源于stack exchange,提问作者snazarihp
相关产品推荐
相关产品推荐

