본문 바로가기
문제 해결 기록

[IntelliJ + Maven + QueryDSL] Failed to execute goal com.mysema.maven:apt-maven-plugin:1.1.3:process 해결

by 타태 2022. 4. 9.

 

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>

 

반응형

댓글