gpt4 book ai didi

java - Gradle通过不同的注释处理器两次生成Querydsl元数据

转载 作者:行者123 更新时间:2023-12-03 03:29:25 25 4
gpt4 key购买 nike

我有一个gradle构建脚本。我想说脚本来生成QueryDSL-Metadata。这些元数据应在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缓存,以防万一。它甚至可能不是与构建脚本相关的纯粹问题,但是即使我通过控制台运行脚本,行为仍然存在。

Gist, basically exactly what I "should" need

(older) Post regarding this issue

最佳答案

This thread's solution对我有用,其想法是将注释处理器挂接到javac中,可以通过compileArgs声明HibernateAnnotationProcessor,大致如下:

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']
}

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

关于java - Gradle通过不同的注释处理器两次生成Querydsl元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41551782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com