.deb パッケージが Java に依存していることを示すことはできますか? ただし、実装 (OpenJDK、IcedTea、Oracle など) は指定しません。

.deb パッケージが Java に依存していることを示すことはできますか? ただし、実装 (OpenJDK、IcedTea、Oracle など) は指定しません。

.deb パッケージには、機能するために Java を必要とするアプリが含まれています。ただし、どの実装 (OpenJDK、IcedTea、Oracle など) がインストールされているかどうかは気にしません。また、ユーザーが実装をインストールしている場合は、別の実装をダウンロードするよう強制したくありません。また、ユーザーが実装をインストールしていない状況にも対処したいと考えています。

.deb パッケージに Java 実装が必要であることを示す方法はありますか? もしある場合、実装がインストールされていない場合はどのように処理すればよいですか?

答え1

.debパッケージに Java ランタイム環境 (JDK ではなく JVM) が必要であることを示す標準的な方法はdefault-jre、 または(前者は GUI のあるプログラム用、後者は GUI が不要なプログラム用) への依存関係を指定し、代わりに の適切なバージョン(アプリケーションが Java 6 以降を使用する場合は 、Java 7 以降を使用する場合は など)default-jre-headlessへの依存関係を指定することです。java-runtimejava6-runtimejava7-runtime

Depends: default-jre | java6-runtime

または

Depends: default-jre-headless | java6-runtime-headless

これはDebianが提供するすべてのJRE(またはDebianの派生版)とOracle JREを扱います。もしこれらはjava-packagedefault-jreデフォルトのJRE(Debian 8 用 OpenJDK 7Debian 9 用 OpenJDK 8Debian 10 用 OpenJDK 11) なので、他の JRE がインストールされていない場合は、JRE が確実にインストールされます。さまざまな JRE パッケージはjava-runtimeサポート レベルに応じてバリアントを提供するため、それに応じて、ユーザーに別の JRE のインストールを強制するのではなく、適切にパッケージ化された既存の互換性のある JRE が使用されます。

ただし、手動でインストールされたパッケージ化されていない Oracle JRE を含む、インストールされているすべての JRE を本当にサポートしたい場合は、パッケージの「Recommends」スタンザで上記を使用し、java起動スクリプトから実行してみてください。理想的には、インストール時 ( でpostinst、ただし JRE が見つからない場合はインストールが失敗しないようにする) および実行する必要があるときにJRE の存在を確認する必要がjavaあります。パッケージに initscript または systemd ユニットなどが含まれている場合は複雑になる可能性があります (管理者に問題があることを通知する方法が明確でなく、確実に気づいて理解される方法で通知する方法が明確ではないという意味で複雑です)。

答え2

これを制御ファイルに挿入すると、最小の Java バージョンを指定でき、適切な Java バージョンがまだインストールされていない場合はインストールする Java 実装も指定できます。

Depends: openjdk-21-jdk-headless | java-sdk-headless (>= 21), ...

java-sdk-headless は、Java 21 互換ランタイムによって提供される仮想パッケージです。

関連情報