Gradle 5 QueryDsl生成重复类

Gradle 5 QueryDsl生成重复类,gradle,querydsl,Gradle,Querydsl,我使用queryDsl生成带有Gradle的Q类。它过去在Gradle 3.5中工作得很好,但升级到Gradle 5.5.1时,它失败了,出现了重复类错误 dependencies { api("org.springframework.boot:spring-boot-starter-data-jpa") { exclude group: "org.hibernate", module: "hibernate-entitymanager" exclude

我使用queryDsl生成带有Gradle的Q类。它过去在Gradle 3.5中工作得很好,但升级到Gradle 5.5.1时,它失败了,出现了重复类错误

dependencies { 

   api("org.springframework.boot:spring-boot-starter-data-jpa") {
        exclude group: "org.hibernate", module: "hibernate-entitymanager"
        exclude group: "org.hibernate", module: "hibernate-core"
        exclude group: "org.apache.tomcat", module: "tomcat-jdbc"
    }
    api("com.zaxxer:HikariCP:${hikaricpVersion}")

    api("com.h2database:h2:1.4.193")
    api("mysql:mysql-connector-java")
    api("com.microsoft.sqlserver:sqljdbc42:6.0.8112")
    api("org.springframework.data:spring-data-jpa")
    api("org.springframework:spring-jdbc")
    api("org.springframework:spring-orm")
    api("org.eclipse.persistence:javax.persistence:${eclipseLinkPersistenceVersion}")
    api("org.eclipse.persistence:eclipselink:${eclipseLinkVersion}")
    api("org.eclipse.persistence:org.eclipse.persistence.jpa:${eclipseLinkVersion}")

    api("com.mysema.querydsl:querydsl-sql:${queryDslVersion}")
    api("com.mysema.querydsl:querydsl-jpa:${queryDslVersion}")
    api("com.mysema.querydsl:querydsl-apt:${queryDslVersion}")

               annotationProcessor('com.mysema.querydsl:querydsl-apt:3.7.4:jpa')
               annotationProcessor("org.springframework.boot:spring-boot-starter-data-jpa")

} 

task generateQueryDSL(type: JavaCompile, group: 'build) {

                source = sourceSets.main.java
                classpath = configurations.compileClasspath
                options.annotationProcessorPath = configurations.annotationProcessor
                destinationDir = file('gensrc/main/java')

        }

        compileJava {
                dependsOn generateQueryDSL
        }

error: duplicate class: com.persistence.domain.model.QOrganizationBasedModel



and likewise for all generated classes
我的generateQueryDsl任务可以很好地生成“gensrc/”下的类,但在compileJava上,这些类会在“build/generated/”下再次生成,这会导致重复的类错误

dependencies { 

   api("org.springframework.boot:spring-boot-starter-data-jpa") {
        exclude group: "org.hibernate", module: "hibernate-entitymanager"
        exclude group: "org.hibernate", module: "hibernate-core"
        exclude group: "org.apache.tomcat", module: "tomcat-jdbc"
    }
    api("com.zaxxer:HikariCP:${hikaricpVersion}")

    api("com.h2database:h2:1.4.193")
    api("mysql:mysql-connector-java")
    api("com.microsoft.sqlserver:sqljdbc42:6.0.8112")
    api("org.springframework.data:spring-data-jpa")
    api("org.springframework:spring-jdbc")
    api("org.springframework:spring-orm")
    api("org.eclipse.persistence:javax.persistence:${eclipseLinkPersistenceVersion}")
    api("org.eclipse.persistence:eclipselink:${eclipseLinkVersion}")
    api("org.eclipse.persistence:org.eclipse.persistence.jpa:${eclipseLinkVersion}")

    api("com.mysema.querydsl:querydsl-sql:${queryDslVersion}")
    api("com.mysema.querydsl:querydsl-jpa:${queryDslVersion}")
    api("com.mysema.querydsl:querydsl-apt:${queryDslVersion}")

               annotationProcessor('com.mysema.querydsl:querydsl-apt:3.7.4:jpa')
               annotationProcessor("org.springframework.boot:spring-boot-starter-data-jpa")

} 

task generateQueryDSL(type: JavaCompile, group: 'build) {

                source = sourceSets.main.java
                classpath = configurations.compileClasspath
                options.annotationProcessorPath = configurations.annotationProcessor
                destinationDir = file('gensrc/main/java')

        }

        compileJava {
                dependsOn generateQueryDSL
        }

error: duplicate class: com.persistence.domain.model.QOrganizationBasedModel



and likewise for all generated classes

使用
annotationProcessor
配置时,默认的
compileJava
任务将处理器添加到编译器中,它将在
build/generated/sources/annotationProcessor/java/main
中生成类

在本例中,您还声明了一个附加的
JavaCompile
任务,您将为该任务提供相同的annotationProcessor配置,然后该任务将再次生成相同的类


为了解决这个问题,我只需完全删除
generateqerydsl
任务,因为
compileJava
很可能已经完成了您需要的所有工作。如果您喜欢将生成的源代码放在不同的文件夹中,您可以通过以下方式进行操作,但我建议在大多数情况下将它们放在build文件夹下。

谢谢:)这是正确的。compileJava任务确实生成了类,因此执行compileJava和generateqerydsl会导致重复的类。@BjornVester I也有类似的问题。我已经删除了
generateqerydsl
,但是,我仍然遇到同样的问题(例如,
错误:尝试为foo.bar.QClass类型重新创建文件
。我还需要更改其他内容吗?我不这么认为,但如果没有更多信息,很难说。如果您通过IntelliJ运行Gradle,并且使用的是旧版本,请尝试升级到最新版本,因为2019.x系列中对此进行了一些错误修复。