Saya memiliki skrip build gradle. Saya ingin skrip tersebut menghasilkan QueryDSL-Metadata. Metadata tersebut harus dibuat di dalam Folder build/generated-sources/metamodel.
Masalah yang saya hadapi saat ini adalah metamodel tidak hanya dihasilkan satu kali, tetapi dua kali. Bersamaan dengan target yang diinginkan, target tersebut juga dibuat di buld/classes/... "default" yang mengakibatkan kesalahan "kelas duplikat".
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
}
Menurut jejak gradle, Masalahnya tampaknya ada dua AnnotatioProcessors dalam campuran. Pertama, HibernateAnnotationProcessor. Kedua, JPAAnnotationProcessor, yang pada akhirnya menghasilkan kelas duplikat. Dan saya tidak tahu mengapa, skrip build terlihat oke. Saya tahu, ini mungkin hanya dugaan, tapi saya berterima kasih atas saran apa pun. Saya bahkan membersihkan cache gradle saya, untuk berjaga-jaga. Ini bahkan mungkin bukan masalah murni terkait skrip build, tetapi perilaku tersebut tetap ada meskipun saya menjalankan skrip melalui konsol.
Intinya, pada dasarnya itulah yang "seharusnya" saya perlukan