본문 바로가기
DevOps/Spring

[Spring] AOP의 ProceedingJoinPoint가 import가 안되는 경우

by breezyday 2022. 6. 14.

스프링 작업 중 AOP 클래스의 하나인 ProceedingJoinPoint를 사용하려고 하는데 import가 안되어서 방법을 찾아봤습니다.

 

기본적으로는 Maven에서 Dependency가 제대로 설정이 되지 않을 경우 자주 볼 수 있는 에러인데 이번에는 설정이 되어 있는데도 오류가 발생하였습니다.

 

1. 오류 확인

 

다른 AOP 태그들은 문제없이 사용할 수 있었는데, ProceedingJoinPoint만 문제가 있었습니다.

 

 

import org.aspectj cannot be resolved라고 나옵니다.

 

2. Maven 설정 확인

먼저 메이븐을 살펴봤습니다. 

 

 

AOP를 사용하기 위해서는 aspectjrt와 aspectjweaver 두 가지 jar가 필요합니다.

만약 aspectjweaver.jar가 빠졌다면 Maven Dependency에 추가해주면 됩니다. 

 

2.1 Maven 설정 추가 및 확인

수정 전

 

Maven 설정에 추가되어 있는데도 오류가 발생하는 경우가 있습니다.

설정에서 <scope>가 runtime으로 설정되어 있으면 오류가 발생합니다.

 

이 부분을 다른 옵션 값으로 수정하거나 삭제해주면 오류가 해결이 됩니다.

 

수정 후

 

저는 간단하게 runtime 옵션을 삭제했습니다. 

<scope> 옵션의 기본 값이 compile이기 때문입니다. compile은 컴파일, 배포 양쪽 모두 포함되는 설정입니다.

 

만약 Maven Depedency에 설정이 되어 있고, jar 파일도 확인이 되는 데 오류가 발생하는 경우라면, <scope> 옵션을 확인하고 runtime이라면 제거해주시면 됩니다.

 

위 설정은 Maven 홈페이지의 설정을 가져온 것입니다. 기본 설정은 <scope>를 runtime으로 제하는데 만약 개발 중이라면 runtime 옵션을 손보면 해결할 수 있습니다. 

 


참고. Maven <Scope> 옵션 값

Scope 옵션 설명
compile - 기본 Scope, 미입력시에 적용.
- 모든 상황(컴파일,배포)에서 포함한다.
provided - 컴파일 시점에는 포함, 배포 시점에 제외
- 운영환경에서 jar파일 중복 문제가 발생할 경우 이 옵션으로 설정
예) JDK, Servlet API, Java EE API 등은 운영환경 및 WAS의 jar 사용
runtime - 컴파일 시점에는 제외, runtime 시점에 포함
system - Maven Repository에서 검색하지 않고 시스템 내에 명시된 위치의 jar를 사용
- systemPath 엘리먼트 사용
- provided처럼 컴파일 시점에만 포함
test - 테스트 컴파일과 실행 시점에만 사용
예) easymock, JUnit 등
import - Maven 2.0.9 이후에서만 적용
- 다른 POM 설정 파일에 정의되어 있는 의존 관계 설정을 현재 프로젝트에 적용.
- <dependencyManagement>에서만 사용할 수 있음.

 

 

 

 

 

댓글