JDK17 이제는 AdoptOpenJDK 대신 Eclipse Temurin 사용
바쁘신분들을 위한 링크
AdoptOpenJDK (8, 11, 16) - https://adoptopenjdk.net/
Eclipse Temurin (8, 11, 16, 17, 18) - https://adoptium.net/temurin/releases/
지난 2021년 9월 14일 JAVA LTS(Long Term Support)인 JDK 17 GA 가 릴리즈되었다.
JDK17은 향후 최대 2029년 9월까지 업데이트가 제공될 예정이다.
참고로 다음 LTS는 JDK21 (2023년 9월)이 될 것으로 예상된다.
2018년 오라클의 정책 변경에 따라 Oracle JDK 바이너리에 적용되던 BCL 라이선스가 바뀌어 이를 사용하려면 라이선스 구독이 필요하다. 따라서 대안으로는 OpenJDK 레퍼런스 소스 코드를 기반으로 제작된 여러 밴더사에서 제공중인 바이너리를 사용할 수 있으며, Azul Platform, Amazon Corretto, ReadHat OpenJDK, AdoptOpenJDK 가 그 대표적인 예이다.
이 중에서 커뮤니티 기반 빌드인 AdoptOpenJDK 가 많이 쓰이는데, AdoptOpenJDK 의 최근 변화에 대해 알아보고 JDK 17 사용 방법을 살펴보고자 한다.
AdoptOpenJDK 에서 Eclipse Adoptium 으로 이전
https://blog.adoptopenjdk.net/2021/08/goodbye-adoptopenjdk-hello-adoptium/
2021년 8월 2일 AdoptOpenJDK 가 Eclipse Adoptium 으로 이전되었다.
Eclipse Adoptium 는 최상위 프로젝트(TLP)를 의미하며, Eclipse Temurin 에서 Java SE 런타임을 진행한다.
Eclipse Temurin 은 오라클 SE TCK(Technology Compatibility Kit)와 Eclipse AQAvit 테스트를 통과했다.
Azul Platform Core OpenJDK 지원 구독을 통해 Temurin 에 대한 상용 지원이 가능하다고 한다.
기존의 AdoptOpenJDK 웹사이트와 AdoptOpenJDK API는 당분간 유지할 예정이나, 빠른 시일내에 Eclipse Adoptium 으로 이전할 것을 권장하고 있다.
Openj9 빌드
Adoptium은 OpenJ9 기반 또는 GraalVM 기반 런타임을 릴리즈하지 않는다. AdoptOpenJDK 에서 OpenJ9이 인기가 많았었는데 이는 IBM 에서 직접 제공하는 빌드를 통해 해결 할 수 있다고 한다. 현재 AdoptOpenJDK API에 'adoptopenjdk'의 최신 'Hotspot' 빌드를 요청하면 최신 Temurin 빌드를 제공하고 'adoptopenjdk'의 'openj9' 빌드를 요청하면 IBM 빌드를 제공하고 있다.
DockerHub도 Eclipse Temurin 으로 이전
Dockerhub의 기존 AdoptOpenJDK 저장소는 2021년 8월 1일부로 Deprecated 되었다.
이후 빌드된 바이너리 이미지를 사용하기 위해서는 Eclipse Temurin 저장소를 사용해야 한다.
제공되는 이미지를 사용하는 경우,
FROM eclipse-temurin:11
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]
이미지를 제공하지 않는 배포를 사용하는 경우,
# Example
FROM <base image>
ENV JAVA_HOME=/opt/java/openjdk
COPY --from=eclipse-temurin:11 $JAVA_HOME $JAVA_HOME
ENV PATH="${JAVA_HOME}/bin:${PATH}"
OpenJDK 11 이후 JRE는 제공하지 않음
Eclipse Temurin 저장소에서 JRE는 더 이상 제공되지 않는다고 한다.
JRE 사용을 위해서는 아래와 같이 jlink 를 이용한 방법으로 가능하다.
jlink 를 이용한 JRE 사용 샘플
# Example of custom Java runtime using jlink in a multi-stage container build
FROM eclipse-temurin:11 as jre-build
# Create a custom Java runtime
RUN $JAVA_HOME/bin/jlink \
--add-modules java.base \
--strip-debug \
--no-man-pages \
--no-header-files \
--compress=2 \
--output /javaruntime
# Define your base image
FROM debian:buster-slim
ENV JAVA_HOME=/opt/java/openjdk
ENV PATH "${JAVA_HOME}/bin:${PATH}"
COPY --from=jre-build /javaruntime $JAVA_HOME
# Continue with your application deployment
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]
Reference
- https://blog.adoptopenjdk.net/2021/08/goodbye-adoptopenjdk-hello-adoptium/
- https://blog.adoptium.net/2021/09/eclipse-temurin-17-available/
- https://hub.docker.com/_/adoptopenjdk
- https://www.ciokorea.com/t/21999/%EA%B0%9C%EB%B0%9C%EC%9E%90/203519
- https://www.azul.com/blog/eclipse-temurin-new-distribution-of-openjdk/
- https://kevin-park.medium.com/springboot-java17-with-jlink-ec0242910c36