오늘 외부 팀에서 받은 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)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 을 열고 아래와 같은 과정을 따라줍니다.
<properties>
<java.version>11</java.version>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<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 를 사용하신다면 위처럼 pom.xml 세팅
+ Reload All Maven Projects 클릭
작업을 모두 하고 나서 곧바로 ctrl + shift + alt + s
를 입력해서
Project Structure
화면을 띄우고, Project Settings > Project
에 들어가서
SDK
의 버전이 maven 에서 설정한 것과 일치하는 버전인지를 꼭 확인하시기 바랍니다.
일치하지 않는다면 일치하는 jdk 를 선택해주시기 바랍니다.