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
能够覆盖其中一个子项目中的文件,但不能覆盖其他子项目中的文件(所有子项目都具有相同的配置)。我错过了什么吗?
我在这里有同样的行为...当生成的源文件夹不为空时就会发生这种情况。尝试先用
gradle clean
执行。然后就OK了。但我正在尝试用您已完成的任务替换默认的 QueryDSL 任务。如果我成功了,我会在这里更新答案。
您可以尝试将 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>