Javaを実行する必要があるアプリケーションを含む.debパッケージがあります。ただし、どの実装をインストールしたか(OpenJDK、IcedTea、Oracleなど)には興味がなく、ユーザーがすでにインストールしている場合は他の実装をダウンロードすることを強くしたくありません。また、ユーザーが実装をインストールしていない場合も処理したいと思います。
.debパッケージにJava実装が必要であることを示す方法はありますか?それでは、実装がインストールされていない状況をどのように処理しますか?
答え1
.deb
パッケージにJava Runtime Environment(JDKではなくJVM)が必要であることを示す標準的な方法は、または(GUIがあるプログラムの場合は前者、GUIが不要な場合は後者)default-jre
への依存関係を指定することです。default-jre-headless
適切なバージョンへの依存関係java-runtime
(java6-runtime
アプリケーションがJava 6以降、java7-runtime
Java 7以降などを使用している場合):
Depends: default-jre | java6-runtime
または
Depends: default-jre-headless | java6-runtime-headless
など。
これは、Debianが提供するすべてのJRE(またはDebian派生物)とOracle JREを処理します。もし基本JRE java-package
(default-jre
Debian 8 用 OpenJDK 7、Debian 9用OpenJDK 8、Debian 10 用 OpenJDK 11)、これにより、他のJREがインストールされていなくてもJREがインストールされます。さまざまなJREパッケージはjava-runtime
サポートレベルに応じてバリエーションを提供するため、ユーザーが他のJREをインストールすることを強制するのではなく、既存の互換性のあるJRE(適切にパッケージ化)が使用されます。
手動でインストールしてパッケージを解凍したOracle JREを含むインストール済みJREをサポートするには、パッケージの「推奨」セクションで上記を使用して起動スクリプト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 準拠のランタイムで提供される仮想パッケージです。