【问题标题】:Gradle generates Querydsl metadata twice via different annotation processorsGradle 通过不同的注释处理器两次生成 Querydsl 元数据
【发布时间】:2017-05-23 22:28:16
【问题描述】:

我有一个 gradle 构建脚本。我想要说脚本来生成 QueryDSL 元数据。这些元数据应该在 build/generated-sources/metamodel 文件夹下生成。

我目前面临的问题是元模型不仅生成一次,而且生成两次。除了所需的目标,它还在“默认”buld/classes/... 中生成,导致“重复类”错误。

sourceSets {
    generated.java.srcDirs=['build/generated-sources/metamodel']
    main {
        java { srcDir 'src/main/java' }
    }
    test {
        java { srcDir 'src/main/test' }
    }
}

configurations { querydslapt }

dependencies {
    compile 'org.hibernate:hibernate-entitymanager:5.2.3.Final',
            'org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final-redhat-1',
            'com.querydsl:querydsl-jpa:4.1.3',
            // ... others, non-hibernate/querydsl ...
    querydslapt 'com.querydsl:querydsl-apt:4.1.3'
}

task generateSources(type: JavaCompile, group: 'build', description:'Generates the QueryDSL query types') {
    source = sourceSets.main.java
    classpath = configurations.compile + configurations.querydslapt
    options.compilerArgs = ['-proc:only',
                            '-processor', 'com.querydsl.apt.hibernate.HibernateAnnotationProcessor']
    destinationDir = sourceSets.generated.java.srcDirs.iterator().next()
}

compileJava {
    dependsOn generateSources
    source generateSources.destinationDir
}

根据 gradle 跟踪,问题似乎是混合中有两个 AnnotatioProcessor。首先,HibernateAnnotationProcessor。其次,一个 JPAAnnotationProcessor,最终生成重复的类。而且我不知道为什么,构建脚本看起来不错。我知道,这可能是猜测,但我很感激任何建议。我什至清理了我的 gradle-cache,以防万一。它甚至可能不是纯粹的构建脚本相关问题,但即使我通过控制台运行脚本,行为仍然存在。

Gist, basically exactly what I "should" need

(older) Post regarding this issue

【问题讨论】:

    标签: java hibernate gradle querydsl


    【解决方案1】:

    This thread's solution 为我工作,想法是将注释处理器挂钩到 javacHibernateAnnotationProcessor 可以通过 compilerArgs 声明,大致如下:

    dependencies {
        compile 'org.hibernate:hibernate-entitymanager:5.2.3.Final',
                'org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final-redhat-1',          
                'com.querydsl:querydsl-jpa:4.1.4',
                'com.querydsl:querydsl-apt:4.1.4',
                // other
    }
    
    ext {
        generatedSourcesDir = file("build/generated-sources/metamodel")
    }
    
    sourceSets {
        main {
            java {
                srcDir 'src/main/java'
                srcDir generatedSourcesDir
            }
        }
        test {
            java { srcDir 'src/main/test' }
        }
    }
    
    compileJava {
        doFirst {
            generatedSourcesDir.mkdirs()
        }
        options.compilerArgs += ['-s', generatedSourcesDir,
                                 '-processor', 'com.querydsl.apt.hibernate.HibernateAnnotationProcessor']
    }
    

    但我仍然想知道为什么第一种方法不起作用(运行两个注释处理器),所以任何想法仍然受到高度赞赏。

    【讨论】:

      猜你喜欢
      • 2020-05-13
      • 2021-12-21
      • 2013-03-13
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多