我可以指出 .deb 套件依賴 Java,但不指定具體實作(例如 OpenJDK、IcedTea、Oracle)嗎?

我可以指出 .deb 套件依賴 Java,但不指定具體實作(例如 OpenJDK、IcedTea、Oracle)嗎?

我有一個 .deb 包,其中包含一個需要 Java 才能運行的應用程式。但是,我不關心他們安裝了哪種實作(例如 OpenJDK、IcedTea、Oracle),而且我不想強迫用戶在安裝了另一種實作的情況下下載另一種實作。我還想處理用戶未安裝任何實現的情況。

有沒有辦法可以表明 .deb 套件需要任何 Java 實作?如果是這樣,我如何處理沒有安裝任何實現的情況?

答案1

.deb指示包需要 Java 運行時環境(JVM,而不是 JDK)的標準方法是指定對default-jre或 的依賴default-jre-headless(前者適用於具有 GUI 的程序,後者適用於不需要 GUI 的程序),以及對適當的版本java-runtimejava6-runtime如果您的應用程式使用Java 6 或更高版本、java7-runtimeJava 7 或更高版本等):

Depends: default-jre | java6-runtime

或者

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

ETC。

這可以處理所有 Debian 提供的 JRE(或 Debian 衍生版本)和 Oracle JRE如果它們是使用java-package.default-jre取決於預設的 JRE (適用於 Debian 8 的 OpenJDK 7,適用於 Debian 9 的 OpenJDK 8,適用於 Debian 10 的 OpenJDK 11),因此如果沒有安裝其他 JRE,這將確保安裝 JRE。各種 JRE 套件java-runtime根據其支援等級提供變體,因此這意味著將使用任何現有的、相容的 JRE(適當打包),而不是強迫使用者安裝另一個 JRE。

如果您確實想要支援任何已安裝的 JRE,包括手動安裝、未打包的 Oracle 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 相容運行時提供。

相關內容