개발 기록

Spring AOP에서 만난 예상치 못한 오류 --enable-preview

neunggu 2023. 3. 15. 11:39
728x90

Spring에서 Aspect 작성 중(끝난 후) 만난 예상치 못한 오류에 대한 정리이다.

1. 환경

java 17

spring boot 2.7.6

spring-boot-start-aop 사용

intelliJ 사용

2. 오류 내용

로컬에서 실행은 되지만 jar 파일 생성시 테스트실패 오류가 나타난다.

../../target/surefire-reports를 확인해보라고 빨간 글자가 나타난다.

대충 내용을 요약하면

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 1.675 s <<< FAILURE!
...
Try running with '--enable-preview'

3. 원인

--enable-preview를 사용하라는 것은 현재 버전에서는 지원되지 않는 무언가를 사용했다는 것이다.

4. 해결방법

우선 시키는대로 --enable-preview를 해봤지만 해결되지 않았다.

원인이 되는 코드로 향해서 코드를 다시 확인한다.(에러가 발생한 곳은 surefire-reports에 써있다)

예제로 작성한 코드 입니다.
----------------------
@Aspect
@Component
public class History {

    @After("@annotation(com.abc.abcd.aspect.history.AddHistory)")
    public void addHistory(JoinPoint joinPoint) {
        ...
        String abc = switch ("A") {
            case "A" -> "AA";
            case default -> "defalut";
        };
        ...
    }
}

 

오류를 발생시킨 부분은 새로운 switch 문법이었다. (java12부터 도입)

java 17을 적용시켜놨는데 aspect에서는 새로운 switch 문법이 jar 패키징시 오류를 발생시켰다.

모든 부분을 테스트 해본 것은 아니지만 aspect 이외의 곳에서는 잘 작동했다.

그래서 가장 간단한 해결방법은 이전 문법을 사용한다.

String abc;
switch ("A") {
    case "A":
        abc = "AA";
        break;
    default:
        abc = "defalut";
        break;
}

 

728x90
반응형