Development/Daily Error

[Java] Unsupported class file major version 61 해결하기

📝 작성 : 2022.08.14  ⏱ 수정 : 
반응형

문제

image-20220814201740013

Unsupported class file major version 61

ArchUnit을 통한 아키텍처 테스트를 해 보려는데 Unsupported class file major version 61 에러가 발생했습니다.

원인

class file major version 61은 로드 하려고 시도하고 있는 클래스 파일이 자바 17 혹은 그 이상의 버전에서 컴파일이 되었으며, 자바 17 이상에서만 사용 될 수 있을 때 발생한다고 합니다.

image-20220814203220531

사실 스프링부트 3.0 부터는 요구되는 자바 버전이 17이 될거라는 소식을 듣고, 미리 JDK 17을 사용하며 불편한 상황이 어떤게 있을 지 알아보고, 트러블슈팅이 가능하다면 해보려고 Temurin JDK 17 (AdoptOpenJDK 에서 이전됨) 을 사용하고 있었거든요.

17 버전을 사용한지는 6개월 정도가 지났는데, 문제가 된건 이번에 처음 입니다.

image-20220814204058523

image-20220814203539631

그리고 JDK17의 특징중 하나는 native Apple Silicon을 지원 하는 점 입니다.

해결

1번방법 : SDK 변경

이럴때는, SDK 를 변경 해 주면 됩니다. IntelliJ IDEA 를 사용하고 있다면 굳이 기본 JDK 를 변경 하지 않아도 프로젝트에 사용하는 SDK만 변경이 가능합니다.

일단 Project Setting 에 들어가는데, Mac에서는 Cmd+; 단축키로 들어갈 수 있습니다.

단축키를 못찾겠다면, File > Project Structure.. 로 들어가면 됩니다.

image-20220814204805733

그러면 아래와 같은 화면이 나오는데요

image-20220814204636749

SDK: temurin-17 로 설정되어 있습니다. 저걸 변경 해 주면 되는데요, Edit 을 눌러 줍니다.

image-20220814204903806

그러면 여러 가지 설치 되어 있는 SDK들의 목록이 나오는데요, 저는 11버전으로 변경 하려고 합니다.

혹시 적절한 버전이 설치되어있지 않다고 해도 걱정하지 마세요. 인텔리제이에서는 SDK도 정말 쉽게 다운로드 할 수 있습니다.

image-20220814205042550

중간쯤에 보이는 + 버튼을 클릭하고 Download JDK... 버튼을 누르면

image-20220814205127852

굉장히 많은 종류의 사용 가능한 JDK가 나오기 때문에, 원하는 버전을 선택 해서 설치하시면 됩니다.

잘 모르시겠다면, Eclipse Temurin 이나 Azul, Corretto 혹은 Oracle OpenJDK 중 선택 하시면 됩니다.

원하는 배포판의 자바 11 버전으로 변경을 해 주고 저장을 해줍니다.

image-20220814205832360

추가로, pom.xml 에서도 자바 버전을 17로 지정 해 두었었다면 JDK 버전에 맞춰 자바 버전을 낮춰 줍니다.

image-20220814205413535

pom.xml

이후 저는 혹시 몰라 mvn clean을 해주긴 했는데, 굳이 안해도 되기는 하는 것 같습니다.

image-20220814205551066

이후 다시 테스트를 실행 해 보면..

image-20220814210241667

문제 없이 빌드에 성공하고, 테스트에도 성공 합니다!

2번방법 : 라이브러리 업데이트

하지만 사실 JDK를 변경하는것보다는 해당 라이브러리와의 호환을 맞춰 보는게 더 근본적인 해결책에 가깝다고 생각합니다.

일단 ArchUnit Github Repository 에 들어가서 관련 이슈들을 둘러 보았습니다.

https://github.com/TNG/ArchUnit

image-20220814210946068

https://github.com/TNG/ArchUnit/pull/779

Pull Request 중, JDK 17과 관련된 커밋이 있었고

image-20220814211027248

https://github.com/TNG/ArchUnit/releases

해당 내용은 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로 변경 해서 다시 같은 테스트를 진행 해 보았습니다.

image-20220814211139847

테스트에 성공합니다!

마치며

사용하고 계신 JDK 버전을 낮추는 방법으로 쉽게 해결 할 수 있겠지만, 여유가 있으시다면 문제가 되는 패키지가 최근에 JDK 17 을 지원하고 있는지 확인 하시는 것도 좋을 거라고 생각합니다.

이상입니다.

반응형