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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:20:54