백/Spring, Spring Boot

[Spring] Querydsl Q 파일 생성 안됨 문제 해결

연지양갱 2023. 11. 30. 05:58
728x90
반응형
SMALL

 Error creating bean with name 'requestMappingHandlerAdapter' defined in class path resource 에러 해결

 

문제를 찾아보니

GuestboookReposiory.java

package com.example.ex3.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.querydsl.QuerydslPredicateExecutor;
import com.example.ex3.entity.Guestbook;

public interface GuestbookRepository extends JpaRepository <Guestbook, Long>, QuerydslPredicateExecutor<Guestbook>{
}

해당 페이지에서

QuerydslPredicateExecutor<Guestbook>을 추가하니까 발생한 오류 였다

 

이유를 찾아보니 이름이 중복되었다는..?

잘모르겠다

 

아무튼 QuerydslPredicateExecutor은 Q도메인 클래스를 얻어와야 합니다.

 

Q도메인 클래스는 프로젝트 명아래 build에 있어야 합니다.

ex3.build.generated.querydsl[main].~~~

아래의 이미지와 같이 나와야 합니다..

그런데 계속 생성이 안됐습니다.

 

 

문제는 build.gradle의 문제인데

 

buildscript {
    ext {
        queryDslVersion = "5.0.0"
    }
}

plugins {
    id 'java'
    id 'war'
    id 'org.springframework.boot' version '3.1.6'
    id 'io.spring.dependency-management' version '1.1.4'
    id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = '17'
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    // JUnit5
    implementation 'org.junit.platform:junit-platform-launcher:1.5.2'
    implementation 'org.junit.jupiter:junit-jupiter:5.5.2'
    implementation 'org.springframework.boot:spring-boot-starter-test'

    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.projectlombok:lombok'
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'

    implementation group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '3.1.4'
    implementation group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-java8time', version: '3.0.4.RELEASE'

    runtimeOnly 'com.h2database:h2'
    //querydsl 추가
    implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
    implementation "com.querydsl:querydsl-apt:${queryDslVersion}"

    // error


    implementation 'javax.persistence:javax.persistence-api:2.2'

}
tasks.named('bootBuildImage') {
    builder = 'paketobuildpacks/builder-jammy-base:latest'
}

test{
    useJUnitPlatform()
}

def querydslDir = "$buildDir/generated/querydsl"

querydsl{
    jpa=true
    querydslSourcesDir = querydslDir
}

sourceSets {
    main.java.srcDir querydslDir
}

configurations {
    querydsl.extendsFrom compileClasspath
}

compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
    querydsl.extendsFrom compileClasspath
}

 

초기의 저의 gradle 파일입니다.

본인의 버전에 맞춰서 설치해야합니다.

중요한 부분은 query부분,

implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
implementation "com.querydsl:querydsl-apt:${queryDslVersion}"

이부분인 implementation 방식이 있으니 확인해주세요

implementation 'com.querydsl:querydsl-jpa:5.0.0'
implementation 'com.querydsl:querydsl-apt:5.0.0'

등등

SMALL

 

 

이부분에서 

Q도메인 을 impletation해주면 됩니다.

 //Querydsl 추가
    implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
    annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
    annotationProcessor "jakarta.annotation:jakarta.annotation-api"
    annotationProcessor "jakarta.persistence:jakarta.persistence-api"

원래 implementation했다면 안넣어두 되지만 저는 안전하게 모두 넣었습니다.

다시 재빌드해주면

빌드하고 실행해주면

아래와 같이 Q도메인이 생성됩니다.

반응형