2022.03.23 - [실전 공부] - [Spring Boot] LogBack.xml to Java Config Bean
[Spring Boot] LogBack.xml to Java Config Bean
2022.03.21 - [문제 해결 기록] - [Spring boot X Spring Security] CORS 설정하기 [Spring boot X Spring Security] CORS 설정하기 2022.03.14 - [실전 공부/Java&Spring&SpringBoot] - [REACT x SPRING BOOT] A..
ktae23.tistory.com
## 급하신분은 맨 아래 pom.xml부터 보세요 ##
실행 환경
JDK 11.0.9
Maven 3.5.4
Maven compiler 3.8.1
Spring Boot 2.6.6
QueryDSL 4.3.1
[스프링부트 쇼핑몰 with JPA] 책 예제를 통한 학습 중 발생한 문제 해결 기록
Maven 빌드 환경에서 QueryDSL을 사용하기 위해서는 많은 예제가 다음과 같은 의존성 주입을 사용한다.
pom.xml - dependency
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>4.3.1</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>4.3.1</version>
</dependency>
pom.xml - plugin
<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>
하지만 나는 리로드 메이븐 프로젝트를 해도 생성이 안되고 컴파일을 직접 해줄 경우 에러가 발생했다.
Failed to execute goal com.mysema.maven:apt-maven-plugin:1.1.3:process (default) on project shop: java.lang.RuntimeException: java.lang.NoClassDefFoundError: com/mysema/codegen/model/Type
서칭을 통해 QueryDSL 깃허브 레퍼지터리에서 다음과 같은 사용 예제를 찾았다.
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.0.5</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory>
<processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.mysema.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
</dependency>
<dependency>
<groupId>com.mysema.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<classifier>apt</classifier>
<version>${querydsl.version}</version>
</dependency>
</dependencies>
</plugin>
위와 같이 작성하고 실행했더니 Q도메인은 잘 생성 된다.
하지만 이젠 다른 곳에서 문제가 생겼다.
JPAQueryFactory를 사용하기 위한 querydsl-jpa 라이브러리를 찾지 못한다.
또, 컴파일 시 package com.querydsl.core.types does not exist 메시지가 나오며 아래 패키지를 찾지 못한다.
하여 querydsl-jpa 라이브러리는 의존성 선언부에, querydsl-apt 는 플러그인 선언부에 나누어 작성하여 빌드하니 Q도메인 생성 및 라이브러리 사용이 모두 정상 동작한다.
그런데 테스트를 돌려보니 이번엔 java.lang.NoClassDefFoundError: com/google/common/collect/Multimap 예외가 뜬다.. 이 클래스는 guava 라이브러리에서 제공하는 클래스다.
그리고 이 클래스는 querydsl-jpa 라이브러리에 들어있다..;;; 테스트 스코프 제외로;;
특별한 이유 없이 나 편하자고 라이브러리 설정을 바꾸는것은 좋지 않아보이니까 querydsl-core 라이브러리를 추가하자.
querydsl-core에는 아래와 같이 guava 라이브러리가 예외 없이 잘 들어있다.
pom.xml (최종_최종_최종)
<project>
{.....}
<dependencies>
{.....}
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-core</artifactId>
<version>4.3.1</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>4.3.1</version>
</dependency>
</dependencies>
<build>
<plugins>
{.....}
<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>
<dependencies>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>4.3.1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
'문제 해결 기록' 카테고리의 다른 글
[JPA x QueryDSL] MultipleBagFetchException 해결 방법 (0) | 2022.07.10 |
---|---|
[QueryDSL] 페이징 직접 처리하기 (0) | 2022.04.12 |
[Spring boot X Spring Security] CORS 설정하기 (0) | 2022.03.21 |
[Docker] 도커 빌드 - 노드 업데이트 에러 해결 (Docker build node update error solved) (0) | 2021.10.01 |
[IntelliJ] Gradle 프로젝트 생성 후 실행 에러 (0) | 2021.07.17 |
댓글