다음을 통해 공유


jlink를 사용하는 Java 런타임

Microsoft는 범용 Java 런타임을 사용하는 대신 특정 애플리케이션 요구 사항에 맞게 만들어진 사용자 지정 Java 런타임의 채택을 인정하고 지원합니다. 이 Java 배포 방법을 사용하면 Java 런타임에 애플리케이션에 필요한 Java 플랫폼 부분만 포함되므로 클라우드 및 서버 기반 Java 애플리케이션과 데스크톱/GUI 애플리케이션 모두에 대한 보안 강화, 배포 크기 감소 및 성능 향상이 가능합니다.

일반적으로 Oracle/Sun Microsystems는 인터넷에서 다운로드한 Java 애플리케이션을 실행하거나 브라우저를 통해 Applets 및 Java Web Start 애플리케이션을 실행하기 위해 컴퓨터를 사용하도록 설정하기 위해 Java Virtual Machine, Java API 및 OS 및 브라우저 관련 통합만 포함하는 JRE(Java 런타임 환경) 설치 관리자를 생성합니다.

최신 웹 애플리케이션과 브라우저가 등장하면서 Applet 및 Java Web Start 기술은 모두 더 이상 사용되지 않으며 브라우저는 더 이상 Java 플러그 인을 지원하지 않습니다. 컴퓨터에 미리 설치된 범용 Java 런타임 환경의 필요성은 덜 중요해졌습니다. Java 9를 사용하면 Applet API가 더 이상 사용되지 않으며(JEP 289 참조) Java 17에서는 API가 제거될 것으로 표시되어 향후 Java 릴리스에서 확실히 제거될 예정입니다.

또 다른 중요한 변화는 Java 9 릴리스로 시작된 Java 모듈화입니다(JSR 376 참조). 이러한 변경의 일환으로 개발자는 이제 호출된 JDK jlink 에 새로 추가된 명령줄을 사용하여 애플리케이션의 요구에 맞게 특별히 설계된 사용자 지정 Java 런타임을 생성하고, 애플리케이션 코드와 함께 기본 제공 임베디드 런타임으로 배포할 수 있으며, 클라우드 기반 워크로드에 대한 컨테이너 이미지의 일부로 자주 사용되며, 또는 GUI 기반 애플리케이션에 대한 설치 관리자의 일부로

현재 Minecraft: Java Edition은 게임에 포함된 사용자 지정 Java 런타임을 사용하여 수백만 명의 Minecraft 게이머에게 배포됩니다. LinkedIn, Yammer, Bing 및 Azure와 같은 온라인 서비스 뒤에 Microsoft는 이 기술을 사용하여 수십만 개의 JVM을 배포합니다.

사용자 지정 Java 런타임 만들기

Java 런타임을 만들려면 사용자 환경에 JDK 9 이상이 설치되어 있어야 합니다. 먼저 Microsoft Build of OpenJDK를 다운로드 하여 설치 합니다.

다음을 사용하여 필수 모듈 식별 jdeps

이제 Java 플랫폼이 모듈로 분할됩니다. 전체 목록은 Java 17 설명서를 참조하세요. 다른 버전의 Java에는 새 모듈이 포함될 수 있습니다.

JDK 도구를 jdeps 사용하여 파일, 디렉터리 또는 JAR 파일을 분석 .class 하여 Java 모듈 종속성, JDK 내부 종속성 및 개발자가 Java 런타임을 생성하는 데 도움이 되는 기타 유용한 정보를 식별할 수 있습니다.

$ cat HelloWorld.java
public class HelloWorld {
  public static void main(String args[]) {
    System.out.println("Hello World!");
  }
}

$ jdeps HelloWorld.class
HelloWorld.class -> java.base
   <unnamed>                                          -> java.io                                            java.base
   <unnamed>                                          -> java.lang                                          java.base

이 도구 jdeps 는 이 클래스가 및 java.io 패키지의 java.lang 형식에만 의존하므로 모듈java.base만 필요합니다. 파일에 대해 입력으로 비슷한 출력이 JAR 생성됩니다. 이제 필요한 모듈 목록을 사용하여 Java 런타임을 만들 수 있습니다.

JDK에서 Java 런타임을 만들려면 원하는 모듈을 알고 있어야 합니다. 이를 식별하는 데 사용합니다 jdeps . 명령줄 도구에 jlink 대한 자세한 내용은 설명서를 참조하세요.

예시:

$ jlink \
         --add-modules java.base \
         --strip-debug \
         --no-man-pages \
         --no-header-files \
         --compress=2 \
         --output /javaruntime

이제 있는 /javaruntime Java 런타임을 사용하여 모듈에 java.base 종속된 애플리케이션 코드를 실행할 수 있습니다. 생성된 jlink 폴더의 javaruntime 구조는 JDK 디렉터리 구조와 유사하며 java JVM을 시작하는 명령줄 도구는 평소와 같이 폴더에 ./bin/ 있습니다. 사용자 지정 Java 런타임에 기존 애플리케이션의 모든 필수 모듈이 포함되어 있는 경우 이 모듈을 참조 JAVA_HOME할 수 있습니다.

$ /javaruntime/bin/java HelloWorld
Hello, World!

위의 예제에서 생성된 Windows의 Java 런타임은 Windows에서 약 24MB를 사용합니다.

Docker 컨테이너 이미지를 사용하여 Java 런타임 만들기

Docker 다단계 빌드를 사용하여 사용자 지정 Java 런타임을 이미지 빌드의 일부로 만들고, 사용하고, 압축할 수 있습니다. Docker를 사용하여 Java 런타임을 만드는 방법을 알아보세요.

참조 자료

javax.net.ssl.SSLHandshakeException: 치명적인 경고 수신: handshake_failure

이 문제를 해결하는 방법에 대한 설명은 Java 보안 및 암호화를 방문하세요.

리소스

OpenJDK의 Microsoft 빌드에 대한 피드백 제공

Microsoft OpenJDK 빌드를 개선하는 데 도움이 되는 의견, 생각 및 아이디어를 보내주세요. GitHub의 OpenJDK 토론 페이지를 방문하여 의견을 보내주세요.

Java 및 OpenJDK는 Oracle 및/또는 해당 계열사의 상표 또는 등록 상표입니다.