Querydsl is a very useful tool to write concise JPA queries. This requires a plugin to generate the meta model classes that will be referenced in the queries. There is a maven plugin to handle the code generation. But when using Gradle, this needs to be configured manually. Add this to the build.gradle file.
ext { generatedSourcesDir = file("${buildDir}/generated-sources") querydslVersion = "3.4.2" } sourceSets { main { java { srcDir "src/main/java" srcDir generatedSourcesDir } } } configurations { querydslapt } task generateQueryDSL(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.mysema.query.apt.jpa.JPAAnnotationProcessor" ] destinationDir = generatedSourcesDir } compileJava { doFirst { generatedSourcesDir.mkdirs(); } options.compilerArgs += ['-s', generatedSourcesDir] dependsOn generateQueryDSL } dependencies { compile "com.mysema.querydsl:querydsl-core:${querydslVersion}" compile "com.mysema.querydsl:querydsl-jpa:${querydslVersion}" querydslapt "com.mysema.querydsl:querydsl-apt:${querydslVersion}" }
Hello,
ReplyDeleteI pretty much copy pasted the same entries as your article to my gradle.build. Having complie time errors. When I run my gradle build I do see that Q classes are getting generated but process fail with Q classes cannot resolve error in my Controller class where I am using these auto generated class. Any idea what could be causing this?
Below are my gradle.build entries:
ext{
generatedSrcDir = file("src/main/generated")
}
sourceSets {
generated {
java {
srcDir "src/main/java"
srcDir generatedSrcDir
}
}
}
configurations {
querydslapt
}
task generateQueryDSL (type: JavaCompile, group: 'build', description: 'Generates the QueryDSL') {
source = sourceSets.main.java
classpath = configurations.compile + configurations.querydslapt
options.compilerArgs = [
"-proc:only",
"-processor", "com.mysema.query.apt.jpa.JPAAnnotationProcessor"
]
destinationDir = generatedSrcDir //sourceSets.generated.java.srcDirs.iterator().next()
}
compileJava {
doFirst {
generatedSrcDir.mkdirs();
}
options.compilerArgs += ['-s', generatedSrcDir]
dependsOn generateQueryDSL
}
dependencies {
def querydslVersion = "3.4.2"
compile "com.mysema.querydsl:querydsl-core:${querydslVersion}"
compile "com.mysema.querydsl:querydsl-jpa:${querydslVersion}"
querydslapt "com.mysema.querydsl:querydsl-apt:${querydslVersion}"
}
Thanks,
Annapurna