Reputation: 123
How i can to generate Q-classes using queryDSL with Spring Boot 3.0.
part of build.gradle:
plugins {
id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
}
configurations {
querydsl.extendsFrom implementation, compileOnly, runtimeOnly, annotationProcessor
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'com.querydsl:querydsl-jpa'
annotationProcessor 'com.querydsl:querydsl-apt'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.testcontainers:postgresql'
runtimeOnly 'org.postgresql:postgresql'
}
querydsl {
jpa = true
library = 'com.querydsl:querydsl-apt:5.0.0'
querydslSourcesDir = "$buildDir/generated/sources/annotationProcessor/java/main"
}
compileQuerydsl {
options.annotationProcessorPath = configurations.querydsl
}
I try to create Q-classes by own hands, but it's doesn't work(
Upvotes: 12
Views: 22717
Reputation: 11
I also faced this problem recently, but I solved it and now it works fine.
Here are the relevant parts of build.gradle.kts
:
plugins {
id("org.springframework.boot") version "3.2.0"
id("io.spring.dependency-management") version "1.1.4"
kotlin("jvm") version "1.9.20"
kotlin("plugin.spring") version "1.9.20"
kotlin("plugin.jpa") version "1.9.20"
// Important use this kapt
kotlin("kapt") version "1.9.22"
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-webflux")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("io.projectreactor.kotlin:reactor-kotlin-extensions")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta")
// Important. It turns out that this is jpa. Change it to jakarta.
// kapt("com.querydsl:querydsl-apt:5.0.0:jpa")
kapt("com.querydsl:querydsl-apt:5.0.0:jakarta")
runtimeOnly("com.h2database:h2")
}
The key points are two important places marked.
Here is the link: https://github.com/querydsl/querydsl/issues/3651
Upvotes: 1
Reputation: 2242
It works for me.
implementation 'com.querydsl:querydsl-core:5.0.0'
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
implementation 'com.querydsl:querydsl-apt:5.0.0'
implementation 'com.querydsl:querydsl-sql:5.0.0'
implementation 'com.querydsl:querydsl-sql-spring:5.0.0'
annotationProcessor 'jakarta.persistence:jakarta.persistence-api:3.1.0'
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta'
Upvotes: 0
Reputation: 330
For Gradle this configs worked fine for me
dependencies {
implementation group: 'com.querydsl', name: 'querydsl-jpa', version: '5.0.0', classifier: 'jakarta'
annotationProcessor group: 'com.querydsl', name: 'querydsl-apt', version: '5.0.0', classifier: 'jakarta'
annotationProcessor group: 'jakarta.persistence', name: 'jakarta.persistence-api', version: '3.1.0'
}
without configuringjakarta.persistence-api
dependency as annotation processor I was getting error
> java.lang.NoClassDefFoundError: jakarta/persistence/Entity
Upvotes: 2
Reputation: 1088
Library used to write SQL in (generated) object notation
Supports Jakarta namespace but…
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>${querydsl.version}</version>
*<classifier>jakarta</classifier>*
</dependency>
Jakarta classifier uses Eclipse Transformer plugin to package a jar with jakarta.* package names Also when including querydsl-apt as an annotation processor path for maven-compiler-plugin Ditch the old com.mysema.maven:apt-maven-plugin
Upvotes: 2
Reputation: 6071
To add more info for maven users based on @Jyrgen answer:
Dependencies
:
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-core</artifactId>
<version>${querydsl.version}</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>${querydsl.version}</version>
<classifier>jakarta</classifier>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-sql</artifactId>
<version>${querydsl.version}</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-sql-spring</artifactId>
<version>${querydsl.version}</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
<classifier>jakarta</classifier>
</dependency>
where ${querydsl.version} = 5.0.0
Plugins
section:
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
Upvotes: 4
Reputation:
I recevied the same error upgrading to Spring Boot 3.
I followed the small hint from QueryDSL release notes: http://querydsl.com/releases.html https://github.com/querydsl/querydsl/issues/2612
And I replaced in my build.gradle:
api 'com.querydsl:querydsl-jpa' -> api 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
and
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jpa' -> annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta'
Upvotes: 24