본문 바로가기

소프트웨어

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

 

 

반응형