使用IntelliJ IDEA启动maven项目时不支持querydsl的注解处理器自动生成Q类,但是在gradle中使用kapt可以完美的自动生成Q类,于是,我尝试在maven使用使用kotlinkapt插件,也不支持自动生成。在文档中看到,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变更了为jakarkamaven配置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>
最后修改:2023 年 07 月 19 日
如果觉得我的文章对你有用,请随意赞赏