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

Spring Boot 1.5.13集成QueryDSL出现QAddress类找不到异常如何解决?

解决Spring Boot 1.5.13集成QueryDSL时的ClassNotFoundException问题

我之前也碰到过一模一样的坑!明明QAddress类已经生成在target目录里了,但调用接口就是报找不到类的异常,核心原因是Spring Boot DevTools的重启类加载器(RestartClassLoader)默认不会加载target/generated-sources目录下的类,而你的QueryDSL生成的Q类恰好就在这个目录里,才导致了这个"明明存在却找不到"的矛盾。

下面是我亲测有效的解决步骤,一步步来:

1. 调整Maven APT插件配置,标记生成目录为源码根目录

首先修改你的maven-apt-plugin配置,添加<sourceRoot>节点,让Maven把生成Q类的目录识别为源码目录,这样IDE和Maven编译时都会正确处理这个目录:

<plugin>
    <groupId>com.mysema.maven</groupId>
    <artifactId>maven-apt-plugin</artifactId>
    <version>1.0</version>
    <executions>
        <execution>
            <goals>
                <goal>process</goal>
            </goals>
            <configuration>
                <!-- 建议指定到apt子目录,避免和其他生成文件混淆 -->
                <outputDirectory>target/generated-sources/apt</outputDirectory>
                <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
            </configuration>
        </execution>
    </executions>
    <!-- 关键配置:标记生成目录为源码根目录 -->
    <configuration>
        <sourceRoot>target/generated-sources/apt</sourceRoot>
    </configuration>
</plugin>

2. 配置Spring Boot DevTools,让它加载生成目录的类

在application.properties(或者对应yml配置文件)中添加以下配置,告诉DevTools的重启类加载器要包含生成Q类的目录:

# 添加额外的重启监控路径
spring.devtools.restart.additional-paths=target/generated-sources/apt
# 指定重启时要加载的类路径规则
spring.devtools.restart.include=**/target/generated-sources/apt/**

3. 手动生成Q类并验证IDE配置

执行Maven命令手动生成Q类,确保目录下有正确的文件:

mvn clean compile

同时检查你的IDE(比如IntelliJ IDEA),确认target/generated-sources/apt被标记为Generated Sources Root——如果没有,右键这个目录,选择Mark Directory as -> Generated Sources Root。

问题根源再梳理下

Spring Boot DevTools为了实现快速重启,用了自定义的RestartClassLoader,它默认只加载src/main/java、target/classes这些标准目录下的类,而QueryDSL通过APT生成的Q类在target/generated-sources下,不在默认加载列表里,所以才出现了这个异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:01:34