使用IntelliJ IDEA启动maven项目时不支持querydsl的注解处理器自动生成Q类,但是在gradle中使用kapt可以完美的自动生成Q类,于是,我尝试在maven使用使用kotlin的kapt插件,也不支持自动生成。在文档中看到,IntelliJ IDEA的构建系统不支持kapt,最终,在https://stackoverflow.com/questions/47957132/querydsl-classes-are-not-generated-in-intellij中查询到可以调用querydsl的代码来实现生成Q类
如果有代码使用了不存在的Q类,依然会报错,所以在IntelliJ IDEA中还是只有gradle能完美使用
1、配置querydsl依赖
以SpringBoot3.0为例,SpringBoot3.0更新了jakarka api,其包名由javax变更了为jakarka,maven配置querydsl也需要增加classifier标签
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>5.0.0</version>
<classifier>jakarta</classifier>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-core</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>5.0.0</version>
<classifier>jakarta</classifier>
</dependency>2、编写生成Q类代码,该代码应只在dev环境中执行
@SpringBootApplication
open class Start
fun main(args: Array<String>) {
val exporter = GenericExporter()
exporter.setKeywords(Keywords.JPA)
exporter.setEntityAnnotation(Entity::class.java)
exporter.setEmbeddableAnnotation(Embeddable::class.java)
exporter.setEmbeddedAnnotation(Embedded::class.java)
exporter.setSupertypeAnnotation(MappedSuperclass::class.java)
exporter.setSkipAnnotation(Transient::class.java)
exporter.setTargetFolder(File("target/generated-sources/java"))
exporter.export(Start::class.java.`package`);
runApplication<Start>(*args)
}3、在执行并成功生成代码后,将target/generated-sources/java配置为源代码文件夹
快捷键Ctrl+Alt+Shift+s打开项目结构,在模块标签下

将target/generated-sources/java文件夹标记为源代码
4、每次在IntelliJ IDEA启动都会自动生成Q类了
5、另外,打包时,把Q类打包进jar包
kapt
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>1.9.0</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
<execution>
<id>kapt</id>
<goals>
<goal>kapt</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>src/main/kotlin</sourceDir>
<sourceDir>src/main/java</sourceDir>
</sourceDirs>
<annotationProcessorPaths>
<!-- 在此处指定你的注解处理器。 -->
<annotationProcessorPath>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>5.0.0</version>
<classifier>jakarta</classifier>
</annotationProcessorPath>
</annotationProcessorPaths>
</configuration>
</execution>
</executions>
</plugin>maven-apt
<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</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>5.0.0</version>
<classifier>jakarta</classifier>
</dependency>
</dependencies>
</plugin>