문제
Unsupported class file major version 61
ArchUnit을 통한 아키텍처 테스트를 해 보려는데 Unsupported class file major version 61 에러가 발생했습니다.
원인
class file major version 61
은 로드 하려고 시도하고 있는 클래스 파일이 자바 17 혹은 그 이상의 버전에서 컴파일이 되었으며, 자바 17 이상에서만 사용 될 수 있을 때 발생한다고 합니다.
사실 스프링부트 3.0 부터는 요구되는 자바 버전이 17이 될거라는 소식을 듣고, 미리 JDK 17을 사용하며 불편한 상황이 어떤게 있을 지 알아보고, 트러블슈팅이 가능하다면 해보려고 Temurin JDK 17 (AdoptOpenJDK 에서 이전됨) 을 사용하고 있었거든요.
17 버전을 사용한지는 6개월 정도가 지났는데, 문제가 된건 이번에 처음 입니다.
그리고 JDK17의 특징중 하나는 native Apple Silicon을 지원 하는 점 입니다.
해결
1번방법 : SDK 변경
이럴때는, SDK 를 변경 해 주면 됩니다. IntelliJ IDEA 를 사용하고 있다면 굳이 기본 JDK 를 변경 하지 않아도 프로젝트에 사용하는 SDK만 변경이 가능합니다.
일단 Project Setting 에 들어가는데, Mac에서는 Cmd+;
단축키로 들어갈 수 있습니다.
단축키를 못찾겠다면,
File > Project Structure..
로 들어가면 됩니다.
그러면 아래와 같은 화면이 나오는데요
SDK: temurin-17 로 설정되어 있습니다. 저걸 변경 해 주면 되는데요, Edit 을 눌러 줍니다.
그러면 여러 가지 설치 되어 있는 SDK들의 목록이 나오는데요, 저는 11버전으로 변경 하려고 합니다.
혹시 적절한 버전이 설치되어있지 않다고 해도 걱정하지 마세요. 인텔리제이에서는 SDK도 정말 쉽게 다운로드 할 수 있습니다.
중간쯤에 보이는
+
버튼을 클릭하고Download JDK...
버튼을 누르면
굉장히 많은 종류의 사용 가능한 JDK가 나오기 때문에, 원하는 버전을 선택 해서 설치하시면 됩니다.
잘 모르시겠다면, Eclipse Temurin 이나 Azul, Corretto 혹은 Oracle OpenJDK 중 선택 하시면 됩니다.
원하는 배포판의 자바 11 버전으로 변경을 해 주고 저장을 해줍니다.
추가로, pom.xml 에서도 자바 버전을 17로 지정 해 두었었다면 JDK 버전에 맞춰 자바 버전을 낮춰 줍니다.
pom.xml
이후 저는 혹시 몰라 mvn clean
을 해주긴 했는데, 굳이 안해도 되기는 하는 것 같습니다.
이후 다시 테스트를 실행 해 보면..
문제 없이 빌드에 성공하고, 테스트에도 성공 합니다!
2번방법 : 라이브러리 업데이트
하지만 사실 JDK를 변경하는것보다는 해당 라이브러리와의 호환을 맞춰 보는게 더 근본적인 해결책에 가깝다고 생각합니다.
일단 ArchUnit Github Repository 에 들어가서 관련 이슈들을 둘러 보았습니다.
Pull Request 중, JDK 17과 관련된 커밋이 있었고
해당 내용은 ArchUnit 0.23.0 부터 적용이 되었습니다.
바로 pom.xml 파일에서 archunit 버전을 올려 줍니다.
<dependency>
<groupId>com.tngtech.archunit</groupId>
<artifactId>archunit-junit5-engine</artifactId>
<version>0.23.1</version>
<scope>test</scope>
</dependency>
JDK도 다시 17로 돌리고, 자바 버전도 17로 변경 해서 다시 같은 테스트를 진행 해 보았습니다.
테스트에 성공합니다!
마치며
사용하고 계신 JDK 버전을 낮추는 방법으로 쉽게 해결 할 수 있겠지만, 여유가 있으시다면 문제가 되는 패키지가 최근에 JDK 17 을 지원하고 있는지 확인 하시는 것도 좋을 거라고 생각합니다.
이상입니다.
'Development > Daily Error' 카테고리의 다른 글
AJAX POST 요청시 Status Code: 302 하며 /denied로 리다이렉트 시키는 문제 해결 (0) | 2022.08.21 |
---|---|
[Spring Redis] incompatible types for field 해결 (0) | 2022.08.17 |
[JPA] No Dialect mapping for JDBC type: 1111 (0) | 2022.06.28 |
[Maven 에러] java.lang.IllegalStateException: Unable to load cache item (0) | 2022.06.24 |
SCP 사용중 Permission denied 대처법 (0) | 2022.06.21 |