Java

我可以指出 .deb 包依賴於 Java,但不指定什麼實現(例如 OpenJDK、IcedTea、Oracle)?

  • January 4, 2019

我有一個 .deb 包,其中包含一個需要 Java 才能執行的應用程序。但是,我不關心他們安裝了哪個實現(例如 OpenJDK、IcedTea、Oracle),並且我不想強迫使用者下載另一個實現(如果他們安裝了一個)。我還想處理沒有安裝任何實現的使用者的情況。

有沒有一種方法可以表明 .deb 包需要任何 Java 實現?如果是這樣,我該如何處理沒有安裝任何實現的它們?

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

Depends: default-jre | java6-runtime

或者

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

等等

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

如果您真的想支持任何已安裝的 JRE,包括手動安裝、未打包的 Oracle JRE,您只能在包的“推薦”部分中使用上述內容,然後嘗試java從您的啟動腳本執行。理想情況下,您應該在安裝時檢查是否存在 JRE(在 中postinst,但如果沒有找到 JRE,請確保安裝不會失敗),以及在需要執行時java- 如果您的包包含 initscript,這可能會很複雜或 systemd 單元之類的(複雜的意思是,如何通知管理員出現問題並不明顯,以一種你可以肯定會被注意到和理解的方式)。

引用自:https://unix.stackexchange.com/questions/291783