목차
Caused by: java.lang.UnsupportedClassVersionError: org/opensearch/index/query/QueryBuilder has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
AWS ECS 에서나 JENKINS 빌드할때 위와 같은 에러가 발생한다.
이 경우 java 버전이 낮아서 지원이 안된다는 의미이다.
https://en.wikipedia.org/wiki/Java_class_file
Java class file - Wikipedia
From Wikipedia, the free encyclopedia A Java class file is a file (with the .class filename extension) containing Java bytecode that can be executed on the Java Virtual Machine (JVM). A Java class file is usually produced by a Java compiler from Java progr
en.wikipedia.org
ECS에서 발생했을경우와 JENKINS에서 발생하느냐에 따라 적용방법이 다릅니다.
ECS의 경우 corretto버전이나 내부에서 설치를 해야하고
jekins의 경우 서버에 설치후 위치를 지정해주면 됩니다.
Amazoncorretto에 java 11 적용
방법은 3가지 혹은 더 있을 것이다.
1. amazoncorretto version 11로 업데이트
2. docker 이미지 생성시 java11 설치
3. 패키지 다운받아서 빌드시 복사해서 적용
이 세가지 중 3번은 번거로워서 살펴보지 않겠다.
3번 대략 이야기하면 java 패키지를 dockerfile에서 run을통하여 다운받아 설치하고 환경변수 적용하면 될것같다.
1. amazoncorretto version 11로 업데이트
amazoncorretto의 경우 open jdk의 버전에 따라 버전이 변경된다.

https://aws.amazon.com/ko/blogs/korea/amazon-corretto-multi-platfom-openjdk-distribution/
Amazon Corretto, 장기 지원 멀티 플랫폼 OpenJDK 무료 배포판 사용하기 | Amazon Web Services
Java는 AWS 고객이 가장 널리 사용하는 언어 중 하나이며, 클라우드 상의 자바 애플리케이션이 지속적으로 지원되는 것은 매우 중요합니다. 작년 이후 많은 AWS 고객들이 장기 지원(Long-term Support)
aws.amazon.com
그래서 간단히 dockerfile 에 있는 버전만 변경하면 된다.
(from amazoncorreetto:8을 11로 변경하면됩니다.)
FROM amazoncorretto:11
RUN echo $' \
public class Hello { \
public static void main(String[] args) { \
System.out.println("Welcome to Amazon Corretto!"); \
} \
}' > Hello.java
RUN javac Hello.java
CMD ["java", "Hello"]
2. docker 이미지 생성시 java11 설치
RUN 을 이용하여 명령어를 입력하는 방법 입니다.
RUN yum install java-11-amazon-corretto.x86_64
FROM amazoncorretto:8
RUN yum install java-11-amazon-corretto.x86_64
RUN echo $' \
public class Hello { \
public static void main(String[] args) { \
System.out.println("Welcome to Amazon Corretto!"); \
} \
}' > Hello.java
RUN javac Hello.java
CMD ["java", "Hello"]
Jenkins에 java 11 적용
jenkins관리 - Global Tool Configuration 에서
jdk 목록을 보면

여기서 Add JDK 클릭

Oracle Java SE 11+는 상업용 라이센스 없이 비즈니스, 상업용 또는 프로덕션 용도로 사용할 수 없습니다. 라고 나와서
자동 install은 상업용 라이센스가 필요한 모양이다.
그렇기 때문에 따로 설치를 해줘야 합니다.
서버에 java 11 설치
우선 젠킨스가 설치된 서버에 접속합니다.
(docker에 젠킨스가 설치 되어 있을경우 -itu 옵션으로 root로 접속한뒤에 설치합니다. 혹은 docker file에 아래 명령어를 입력합니다.)
ubuntu
sudo apt-get install openjdk-11-jdk
설치경로
/usr/lib/jvm/java-11-openjdk-amd64
amazon-linux
sudo yum install -y java-11-amazon-corretto.x86_64
설치경로
/usr/lib/jvm/java-11-amazon-corretto.x86_64
Jenkins에 설정 적용
설치가 완료되었다면 아까 Global Tool Configuration의 jdk로 돌아갑니다.

Install automatically 옆에 체크를 클릭하여 해제합니다.

그럼 JAVA_HOME 이라고 입력하는 란이 하나 나오는데
NAME 에는 적당한이름
JAVA_HOME에는 설치경로를 적어 주시고 save 하여 저장하면 끝납니다.
Jenkins에서 java 버전 확인
아무 freestyle 프로젝트하나 만들고 빌드에 Add build step - excute shell 에 java -version을 입력하고 저장한뒤 빌드합니다.

java -version

빌드 하고 나서 콘솔출력을 확인하면 11버전이 잘 적용 된것을 확인 하실수 있습니다.
Reference
docker로 amazon corretto 시작
https://docs.aws.amazon.com/ko_kr/corretto/latest/corretto-11-ug/docker-install.html
도커 이미지에서 Amazon Corretto 11을 시작하기 - Amazon Corretto
이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.
docs.aws.amazon.com
젠킨스 jdk 버전 11로 올리는 방법
배경 이번 프로젝트의 경우에는 jdk8이 문제가 없던 상황에서 잘 쓰다가 jdk11이 필요한 상황이었다. 예를 들면 rabbitMQ나 sonarqube를 사용하는데 11 이상이 필요한 것을 확인했다. dev 서버, prod 서버,
www.blog.ecsimsw.com
끝
'CLOUD > AWS' 카테고리의 다른 글
AWS S3 보안구성 ACL, public Access 업데이트 (2023.4) (0) | 2023.02.13 |
---|---|
AWS 자격증 무료 재시험(재응시) 이벤트(aws certificate) pearson vue (2) | 2023.02.10 |
AWS 보안, 자격 증명 및 규정 준수 서비스 (0) | 2023.01.26 |
AWS ALB에 SSL 추가(여러개) 등록하기 (0) | 2023.01.18 |
aws Oracle Data Pump s3 migration (0) | 2023.01.11 |
댓글