[Maven] Class file has wrong version 55.0, should be 52.0 에러 대처법

식빵·2023년 8월 21일
0

trouble-shooting

목록 보기
5/10
post-custom-banner

😜 사건의 발단

오늘 외부 팀에서 받은 maven 빌드툴 기반으로 생성된
프로젝트 코드를 인계 받았고, 해당 소스를 intellij 에서 import 를 했습니다.

그런데 maven clean package 를 했는데 아래와 같은 에러를 뱉어냈습니다.

class file has wrong version 55.0 should be 52.0

그리고 에러문구 주변에는 pom.xml 에서 systemPath 로 dependecy 가 잡힌
jar 파일의 내부 class 파일에 의한 에러라고 더 상세히 원인을 알려줬습니다.


  • 참고(1) pom.xml 의 dependency
<dependencies>
  <dependency>
    <groupId>my</groupId>
    <artifactId>custom</artifactId>
    <scope>system</scope>
    <version>1.0.0</version>
    <systemPath>${basedir}/lib/my-custom.jar</systemPath>
  </dependency>
</dependencies>

  • 참고(2) 해당 jar 파일의 저장된 경로



😂 문제의 원인

구글링을 해보니 해당 에러와 관련된 StackOverflow 의 Q&A 글을 찾을 수 있었습니다.

이 에러는 ...

  • 현재 사용하는 maven 이 사용하는 jdk 버전 (= 8)
  • 에러를 일으키는 jar 안의 class 파일이 컴파일될 당시에 사용된 jdk 버전 (11)

이 서로 달라서 발생하는 것이였습니다.

더 정확히는 maven 에 의해서 compile 작업을 할 때, maven 자신이 사용하는
javac 버전이 8인데, 더 높은 버전의 jdk11 로 compile 된 결과물인 Class 파일을
같이 사용하는 게 이치(?)에 맞지 않다고 해서 뱉어낸 에러인 겁니다.

참고: 에러 문구에 나오는 숫자의 의미

45 = Java 1.1
46 = Java 1.2
47 = Java 1.3
48 = Java 1.4
49 = Java 5
50 = Java 6
51 = Java 7
52 = Java 8
53 = Java 9
54 = Java 10
55 = Java 11
56 = Java 12
57 = Java 13

에러문구가 class file has wrong version 55.0 should be 52.0 이면...

maven 의 jdk 버전이 8 (= 52.0) 이고,
클래스 파일의 컴파일러(javac) 버전은 11 (= 55.0) 이겠죠?



😎 해결법

jar 를 뜯어 고치기는 힘들어서 그냥 maven 의 jdk 버전을 올리기로 했습니다.
버전은 8 ➔ 11 로 올려줬습니다.

올려주는 방법은 pom.xml 의 내용을 수정하면 가능합니다.
pom.xml 을 열고 아래와 같은 과정을 따라줍니다.

java version 프로퍼티 설정

<properties>
  <java.version>11</java.version>
  <maven.compiler.source>11</maven.compiler.source>
  <maven.compiler.target>11</maven.compiler.target>
</properties>

만약 maven-compiler-plugin 있다면?

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
      <source>11</source>
      <target>11</target>
      <encoding>UTF-8</encoding>
    </configuration>
</plugin>
  • <source>, <target> 태그 내의 버전도 11 로 통일!
  • 그냥 maven-compiler-plugin plugin 태그를 통으로 주석처리하거나 지웁니다.
<!--<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
      <source>11</source>
      <target>11</target>
      <encoding>UTF-8</encoding>
    </configuration>
</plugin>-->
  • properties 에서 maven.compiler.source, maven.compiler.target
    이미 버전을 지정했기 때문에 괜찮습니다.

이러고 나서 다시 Reload All Maven Projects 버튼을 클릭해주면 됩니다! 끝!
이후에 패키징이 잘되더군요.



혹시 intellij 를 사용하신다면....

intellij 를 사용하신다면 위처럼 pom.xml 세팅 + Reload All Maven Projects 클릭
작업을 모두 하고 나서 곧바로 ctrl + shift + alt + s 를 입력해서
Project Structure 화면을 띄우고, Project Settings > Project 에 들어가서
SDK 의 버전이 maven 에서 설정한 것과 일치하는 버전인지를 꼭 확인하시기 바랍니다.

일치하지 않는다면 일치하는 jdk 를 선택해주시기 바랍니다.



✨ 참고 링크

profile
백엔드를 계속 배우고 있는 개발자입니다 😊
post-custom-banner

0개의 댓글