执行mvn clean install后Querydsl Q类仍无法生成求助
Querydsl Q类生成失败问题排查与解决
执行mvn clean install后,Querydsl的Q类始终无法生成,相关代码和配置如下:
实体类代码
import javax.persistence.*; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) long id; @Column(nullable = false, unique = true) String username; }
pom.xml配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.intelidia.intel1</groupId> <artifactId>intel1System</artifactId> <version>1.0-SNAPSHOT</version> <name>intel1System</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit.version>5.10.0</junit.version> <querydsl.version>5.1.0</querydsl.version> </properties> <dependencies> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-apt</artifactId> <version>${querydsl.version}</version> </dependency> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-jpa</artifactId> <version>${querydsl.version}</version> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>javax.persistence-api</artifactId> <version>2.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>com.mysema.maven</groupId> <artifactId>apt-maven-plugin</artifactId> <version>1.1.3</version> <executions> <execution> <goals> <goal>process</goal> </goals> <configuration> <outputDirectory>target/generated-sources/java</outputDirectory> <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-apt</artifactId> <version>4.1.2</version> </dependency> </dependencies> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> <plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> <executions> <execution> <!-- Default configuration for running with: mvn clean javafx:run --> <id>default-cli</id> <configuration> <mainClass>com.intelidia.intel1.intel1system/com.intelidia.intel1.intel1system.HelloApplication</mainClass> <launcher>app</launcher> <jlinkZipName>app</jlinkZipName> <jlinkImageName>app</jlinkImageName> <noManPages>true</noManPages> <stripDebug>true</stripDebug> <noHeaderFiles>true</noHeaderFiles> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
问题原因
- 版本冲突:使用的
apt-maven-plugin是1.1.3版本,仅支持Querydsl 4.x及以下版本,但全局配置的Querydsl版本是5.1.0,版本不兼容导致注解处理器无法正常运行。同时插件内部依赖的querydsl-apt是4.1.2,和全局的5.1.0不一致,进一步加剧了冲突。 - 插件过时:Querydsl 5.x开始官方不再推荐使用
apt-maven-plugin,转而使用自研的querydsl-maven-plugin处理注解生成。
解决方案
替换过时插件,统一Querydsl版本,修改后的pom.xml关键部分如下:
调整依赖
给querydsl-apt添加provided作用域,避免打包时冗余引入:
<dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-apt</artifactId> <version>${querydsl.version}</version> <scope>provided</scope> </dependency>
替换插件
移除原有的apt-maven-plugin,添加Querydsl官方插件:
<plugin> <groupId>com.querydsl</groupId> <artifactId>querydsl-maven-plugin</artifactId> <version>${querydsl.version}</version> <executions> <execution> <goals> <goal>export</goal> </goals> </execution> </executions> <configuration> <outputDirectory>target/generated-sources/java</outputDirectory> <jpa>true</jpa> <querydslDefaultPackage>com.intelidia.intel1.intel1system</querydslDefaultPackage> <!-- 替换为你的实体类所在包 --> </configuration> </plugin>
验证
执行mvn clean compile,查看target/generated-sources/java目录下是否生成了QUser类,之后执行mvn clean install即可正常包含生成的Q类。
内容的提问来源于stack exchange,提问作者Noor
相关产品推荐
相关产品推荐

