Как правильно установить стандартную версию Java и нужную мне версию JavaFX из моего DEB-пакета на Linux?

Разве OpenJDK не доступен в каком-либо стандартном репозитории, чтобы не включать Java в свой deb-пакет? Я попытался указать в файле control требование: <br/> Depends: default-jdk <br/> Однако при установке пакет выдает ошибку, что "default-jdk не установлен". <br/> <br/> Если в postinst (после установки) попробовать выполнить команду "sudo apt -y install openjdk-19-jre", то это будет заблокировано системным процессом, так как в данный момент идет установка самого deb-пакета. <br/> <br/> В итоге, чтобы использовать JavaFX, мне приходится включать её в пакет самостоятельно. Но как установить какую-либо дефолтную версию Java, не включая её в пакет? <br/> <br/> У меня есть хостинг, но неразумно каждый раз скачивать Java при установке.
  • 23 февраля 2025 г. 6:14
Ответы на вопрос 2
Для того чтобы установить стандартную версию Java (такую как OpenJDK) и нужную вам версию JavaFX на Linux из DEB-пакета, вы можете воспользоваться следующим подходом:

1. **Использование зависимостей**: 
    Убедитесь, что ваш DEB-пакет правильно указывает зависимости. Если вы хотите, чтобы пакет зависел от OpenJDK, вы можете указать в файле `control` такие зависимости, как:
    ```
    Depends: default-jdk | openjdk-19-jdk
    ```
   Это даст возможность установить либо одну, либо другую версию.

2. **Проверка доступности JDK**: 
    Убедитесь, что OpenJDK доступен в стандартной репозитории для вашей системы. Для Ubuntu вы можете проверить это с помощью команды:
    ```bash
    apt search openjdk
    ```

3. **Добавление JavaFX**: 
   Если вы хотите установить JavaFX, современный способ — это добавить зависимость на соответствующий пакет JavaFX. Для Java 11 и выше существуют пакеты `openjfx`, которые вы можете указать в зависимости:
   ```
   Depends: openjfx
   ```

4. **Предоставление инструкции для установки**:
   Вместо того чтобы пытаться установить OpenJDK в вашем скрипте `postinst`, добавьте в ваше описание пакета инструкцию для пользователя о том, что он должен установить OpenJDK перед установкой вашего пакета. Например, можно добавить в `README` или в описание пакета:
   ```
   Для установки данного программного обеспечения требуется установить OpenJDK и JavaFX. Используйте команды:
   sudo apt-get install default-jdk openjfx
   ```

5. **Установка вашего пакета**:
   Убедитесь, что пользователи знают, что сначала нужно установить JDK и JavaFX, и только потом ваш пакет. Если вы хотите сделать установку более автоматизированной, вы можете использовать метапакет.

6. **Проверка установленных пакетов**:
   При установке убедитесь, что через `dpkg` или `apt` правильно зарегистрированы все зависимости, и что OpenJDK и JavaFX действительно установлены.

### Пример файла `control`:
```
Package: your-package
Version: 1.0
Architecture: amd64
Maintainer: Your Name <your.email@example.com>
Depends: default-jdk | openjdk-19-jdk, openjfx
Description: Ваша программа с использованием Java и JavaFX
```

### Установка пакетов:
Для установки пакета с зависимостями, пользователь должен выполнить:
```bash
sudo apt-get update
sudo apt-get install default-jdk openjfx
sudo dpkg -i your-package.deb
```

### Заключение:
С помощью правильных зависимостей и качественного описания вы сможете избежать проблем с установкой Java при установке вашего DEB-пакета.
1. Что мешает проверить - есть ли пакет в репозитории? 
apt search default-jdk
2. Ошибки нужно цитировать.
3. Вероятнее вы давно не делали на системе apt update и текущий кеш ссылается на отсутствующую версию default-jdk, добавьте apt-get update в preinst
4. Почему ставите яву явно не в preinst, а в postinst, это не логично.
5. И кстати, зачем вам JDK, если есть default-jre?
Похожие вопросы