ฉันมีสคริปต์สร้างการไล่ระดับ ฉันต้องการสคริปต์ดังกล่าวเพื่อสร้าง QueryDSL-Metadata ข้อมูลเมตาเหล่านั้นควรสร้างขึ้นภายใต้โฟลเดอร์ build/generated-sources/metamodel
ปัญหาที่ฉันกำลังเผชิญอยู่ในขณะนี้คือ metamodel ไม่เพียงถูกสร้างขึ้นเพียงครั้งเดียว แต่สองครั้ง นอกเหนือจากเป้าหมายที่ต้องการแล้ว ยังถูกสร้างขึ้นใน "default" 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
}
ตามการติดตามการไล่ระดับ ปัญหาดูเหมือนว่ามี AnnotatioProcessors สองตัวผสมกัน ขั้นแรก HibernateAnnotationProcessor ประการที่สอง JPAAnnotationProcessor ในที่สุดก็สร้างคลาสที่ซ้ำกัน และฉันไม่เข้าใจว่าทำไม สคริปต์บิลด์ก็ดูใช้ได้ ฉันรู้ว่ามันอาจจะเป็นการคาดเดา แต่ฉันก็ขอบคุณสำหรับข้อเสนอแนะใดๆ ฉันยังทำความสะอาดแคช gradle ของฉันด้วยในกรณีนี้ อาจไม่ใช่ปัญหาที่เกี่ยวข้องกับบิลด์สคริปต์ แต่พฤติกรรมยังคงมีอยู่แม้ว่าฉันจะเรียกใช้สคริปต์ผ่านคอนโซลก็ตาม