【问题标题】:Gradle 5 QueryDsl Generating Duplicate ClassesGradle 5 QueryDsl 生成重复类
【发布时间】:2019-12-14 22:41:37
【问题描述】:

我正在使用 queryDsl 通过 Gradle 生成 Q 类。它曾经在 Gradle 3.5 上运行良好,但在升级到 Gradle 5.5.1 时,它因重复类错误而失败。

我的 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

【问题讨论】:

    标签: gradle querydsl


    【解决方案1】:

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

    在您的情况下,您还声明了一个额外的 JavaCompile 任务,您为其提供相同的 annotationProcessor 配置,然后将再次生成相同的类。

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

    【讨论】:

    • 谢谢 :) 没错。 compileJava 任务会生成类,因此同时执行 compileJava 和 generateQueryDsl 会导致类重复。
    • @BjornVester 我有类似的问题。我已经删除了generateQueryDSL,但是我仍然遇到同样的问题(即error: Attempt to recreate a file for type foo.bar.QClass。我还需要更改其他任何内容吗?
    • 我不这么认为,但没有更多信息很难说。如果您通过 IntelliJ 运行 Gradle 并且使用的是旧版本,请尝试升级到最新版本,因为 2019.x 系列中对此进行了一些错误修复。
    猜你喜欢
    • 2020-09-30
    • 2023-04-08
    • 2020-10-12
    • 2021-05-08
    • 1970-01-01
    • 2012-12-06
    • 2021-07-31
    • 1970-01-01
    • 2019-03-25
    相关资源
    最近更新 更多