Gradle:无法生成 QueryDSL 类

问题描述 投票:0回答:2

Gradle 版本:5.1

Java版本:11

我在

gradle
文件中定义了以下任务来生成
QueryDSL
类:

task generateQClasses (type: JavaCompile) {
    source = sourceSets.main.java.srcDirs
    classpath = sourceSets.main.compileClasspath
    destinationDir = file('src/main/java')
    options.annotationProcessorPath = configurations.annotationProcessor
    options.compilerArgs = ['-proc:only', '-processor', 'com.querydsl.apt.jpa.JPAAnnotationProcessor', '-Aquerydsl.packageSuffix=.querydsl']
}

下面是我的依赖项块:

annotationProcessor "com.querydsl:querydsl-apt:4.2.1:jpa"
annotationProcessor "org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.2.Final"
annotationProcessor "javax.annotation:javax.annotation-api:1.3.2"

如果我执行 `gradlewgenerateQClasses,我会在日志中看到以下内容:

Attempt to recreate a file for type foo.bar.QClass
error: Attempt to recreate a file for type foo.bar.QClass

失败并显示错误,表示文件已存在。如何配置此任务以覆盖文件(如果存在)?

另外,上面的配置是根项目的配置,它有5个子项目。

AnnotationProcessor
能够覆盖其中一个子项目中的文件,但不能覆盖其他子项目中的文件(所有子项目都具有相同的配置)。我错过了什么吗?

java gradle querydsl gradlew annotation-processor
2个回答
0
投票

我在这里有同样的行为...当生成的源文件夹不为空时就会发生这种情况。尝试先用

gradle clean
执行。然后就OK了。但我正在尝试用您已完成的任务替换默认的 QueryDSL 任务。如果我成功了,我会在这里更新答案。


0
投票

您可以尝试将 phease 配置为 package,因为 apt 插件输入的是编译后的 .class 文件。

<plugin>
                <groupId>com.mysema.maven</groupId>
                <artifactId>apt-maven-plugin</artifactId>
                <version>1.1.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <configuration>
<!--                            <options>-->
<!--                                <querydsl.entityAccessors>true</querydsl.entityAccessors>-->
<!--                            </options>-->
                            <outputDirectory>target/generated-sources/java</outputDirectory>
                            <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor,lombok.launch.AnnotationProcessorHider$AnnotationProcessor</processor>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
© www.soinside.com 2019 - 2024. All rights reserved.