使用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>