第3章 モジュラーアプリケーション用のカスタム Java ランタイム環境の作成


jlink ツールを使用して、モジュラーアプリケーションからカスタム Java ランタイム環境を作成できます。

前提条件

手順

  1. Logger クラスを使用して、単純な Hello World アプリケーションを作成します。

    1. ベースの Red Hat build of OpenJDK 21 バイナリーが jdk-17 フォルダーに存在することを確認します。

      $ ls jdk-17
      bin  conf  demo  include  jmods  legal  lib  man  NEWS  release
      $ ./jdk-17/bin/java -version
      openjdk version "17.0.10" 2021-01-19 LTS
      OpenJDK Runtime Environment 18.9 (build 17.0.10+9-LTS)
      OpenJDK 64-Bit Server VM 18.9 (build 17.0.10+9-LTS, mixed mode)
    2. アプリケーションのディレクトリーを作成します。

      $ mkdir -p hello-example/sample
    3. 以下の内容を含む hello-example/sample/HelloWorld.java ファイルを作成します。

      package sample;
      
      import java.util.logging.Logger;
      
      public class HelloWorld {
          private static final Logger LOG = Logger.getLogger(HelloWorld.class.getName());
          public static void main(String[] args) {
              LOG.info("Hello World!");
          }
      }
    4. hello-example/module-info.java という名前のファイルを作成し、以下のコードをファイルに追加します。

      module sample
      {
          requires java.logging;
      }
    5. アプリケーションをコンパイルします。

      $ ./jdk-17/bin/javac -d example $(find hello-example -name \*.java)
    6. カスタム JRE なし でアプリケーションを実行します。

      $ ./jdk-17/bin/java -cp example sample.HelloWorld
      Mar 09, 2021 10:48:59 AM sample.HelloWorld main
      INFO: Hello World!

      上記の例は、1 つのクラスを実行するために 311 MB を必要とするベース Red Hat build of OpenJDK を示しています。

    7. (オプション) Red Hat build of OpenJDK を検査し、アプリケーションの必須でない多くのモジュールを表示できます。

      $ du -sh jdk-17/
      313M	jdk-17/
      $ ./jdk-17/bin/java --list-modules
      java.base@17.0.1
      java.compiler@17.0.1
      java.datatransfer@17.0.1
      java.desktop@17.0.1
      java.instrument@17.0.1
      java.logging@17.0.1
      java.management@17.0.1
      java.management.rmi@17.0.1
      java.naming@17.0.1
      java.net.http@17.0.1
      java.prefs@17.0.1
      java.rmi@17.0.1
      java.scripting@17.0.1
      java.se@17.0.1
      java.security.jgss@17.0.1
      java.security.sasl@17.0.1
      java.smartcardio@17.0.1
      java.sql@17.0.1
      java.sql.rowset@17.0.1
      java.transaction.xa@17.0.1
      java.xml@17.0.1
      java.xml.crypto@17.0.1
      jdk.accessibility@17.0.1
      jdk.attach@17.0.1
      jdk.charsets@17.0.1
      jdk.compiler@17.0.1
      jdk.crypto.cryptoki@17.0.1
      jdk.crypto.ec@17.0.1
      jdk.dynalink@17.0.1
      jdk.editpad@17.0.1
      jdk.hotspot.agent@17.0.1
      jdk.httpserver@17.0.1
      jdk.incubator.foreign@17.0.1
      jdk.incubator.vector@17.0.1
      jdk.internal.ed@17.0.1
      jdk.internal.jvmstat@17.0.1
      jdk.internal.le@17.0.1
      jdk.internal.opt@17.0.1
      jdk.internal.vm.ci@17.0.1
      jdk.internal.vm.compiler@17.0.1
      jdk.internal.vm.compiler.management@17.0.1
      jdk.jartool@17.0.1
      jdk.javadoc@17.0.1
      jdk.jcmd@17.0.1
      jdk.jconsole@17.0.1
      jdk.jdeps@17.0.1
      jdk.jdi@17.0.1
      jdk.jdwp.agent@17.0.1
      jdk.jfr@17.0.1
      jdk.jlink@17.0.1
      jdk.jpackage@17.0.1
      jdk.jshell@17.0.1
      jdk.jsobject@17.0.1
      jdk.jstatd@17.0.1
      jdk.localedata@17.0.1
      jdk.management@17.0.1
      jdk.management.agent@17.0.1
      jdk.management.jfr@17.0.1
      jdk.naming.dns@17.0.1
      jdk.naming.rmi@17.0.1
      jdk.net@17.0.1
      jdk.nio.mapmode@17.0.1
      jdk.random@17.0.1
      jdk.sctp@17.0.1
      jdk.security.auth@17.0.1
      jdk.security.jgss@17.0.1
      jdk.unsupported@17.0.1
      jdk.unsupported.desktop@17.0.1
      jdk.xml.dom@17.0.1
      jdk.zipfs@17.0.1

      サンプル Hello World アプリケーションには、非常にいくつかの依存関係があります。jlink を使用して、アプリケーションのカスタムランタイムイメージを作成できます。これらのイメージを使用して、必要な Red Hat build of OpenJDK 依存関係のみでアプリケーションを実行できます。

  2. アプリケーションモジュールを作成します。

    $ mkdir sample-module
    $ ./jdk-17/bin/jmod create --class-path example/ --main-class sample.HelloWorld --module-version 1.0.0 -p example sample-module/hello.jmod
  3. 必要なモジュールとアプリケーションのカスタムアプリケーションランチャーを使用して、カスタム JRE を作成します。

    $ ./jdk-17/bin/jlink --launcher hello=sample/sample.HelloWorld --module-path sample-module --add-modules sample --output custom-runtime
  4. 生成したカスタム JRE のモジュールをリスト表示します。

    元の Red Hat build of OpenJDK の分数だけを維持していることを確認します。

    $ du -sh custom-runtime
    50M	custom-runtime/
    $ ./custom-runtime/bin/java --list-modules
    java.base@17.0.10
    java.logging@17.0.10
    sample@1.0.0
    注記

    Red Hat build of OpenJDK は、313 M ランタイムイメージから 50 M ランタイムイメージに、カスタム Java ランタイムイメージのサイズを縮小します。

  5. hello launcher を使用してアプリケーションを起動します。

    $ ./custom-runtime/bin/hello
    Jan 14, 2021 12:13:26 PM HelloWorld main
    INFO: Hello World!

    サンプルアプリケーションと生成された JRE には java.basejava.logging、および sample モジュール以外の他の依存関係がありません。

    custom-runtime でカスタムランタイムにバンドルされたアプリケーションを配布できます。このカスタムランタイムにはアプリケーションが含まれます。

    注記

    ベース Red Hat build of OpenJDK のセキュリティー更新ごとに、アプリケーションのカスタム Java ランタイムイメージを再構築する必要があります。

改訂日時: 2024-05-10

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat, Inc.