java.lang.NoClassDefFoundError: com/querydsl/apt/AbstractQuerydslProcessor 에러 해결
개발을 하다가 만난 java.lang.NoClassDefFoundError: com/querydsl/apt/AbstractQuerydslProcessor 에러를 해결했던 경험을 공유하려고 합니다. 결론부터 말하자면 apt-maven-plugin 플러그인을 제외했습니다.
오류 상황
이번에도 역시나 로컬에서는 문제가 없지만 다른 환경에서 문제가 있는 상황이었습니다. 개발을 하다보면 이런 일이 많은데요. Jenkins 에서 CI 를 위한 자동화 빌드 도중 에러가 발생한 것입니다. 에러 로그는 아래와 같습니다.
[ERROR] execute error
java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.NoClassDefFoundError: com/querydsl/apt/AbstractQuerydslProcessor
at java.util.concurrent.FutureTask.report (FutureTask.java:122)
at java.util.concurrent.FutureTask.get (FutureTask.java:191)
at com.mysema.maven.apt.AbstractProcessorMojo.execute (AbstractProcessorMojo.java:346)
항상 그렇듯이 로컬에서는 문제가 없습니다.. 대체 뭐가 문제일까요?
해결 방법
결론적으로는 pom.xml 파일에서 apt-maven-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>org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
apt-maven-plugin 플러그인은 어노테이션 프로세싱을 하는 라이브러리인데, MongoAnnotationProcessor가 AbstractQuerydslProcessor를 상속하고 있어서 발생한 문제로 보입니다.
public class MongoAnnotationProcessor
extends com.querydsl.apt.AbstractQuerydslProcessor
MongoAnnotationProcessor 문서
MongoAnnotationProcessor (Spring Data MongoDB 4.2.1 API)
All Implemented Interfaces: Processor Annotation processor to create Querydsl query types for QueryDsl annotated classes. Author: Oliver Gierke, Owen Q Field Summary Fields inherited from class com.querydsl.apt.AbstractQuerydslProcessor ALLOW_OTHER_PROCES
docs.spring.io