У меня есть скрипт сборки 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, проблема заключается в том, что в миксе есть два AnnotatioProcessors. Во-первых, HibernateAnnotationProcessor. Во-вторых, JPAAnnotationProcessor, в конечном итоге создающий дублирующийся класс. И я не могу понять почему, скрипт сборки выглядит нормально. Я знаю, что это могут быть догадки, но я благодарен за любые предложения. На всякий случай я даже почистил свой gradle-cache. Это может быть даже не проблема, связанная с чистым скриптом сборки, но поведение сохраняется, даже если я запускаю скрипт через консоль.