Не удается развернуть приложение JavaFX (Невозможно собрать артефакт – fx:deploy недоступен в этом JDK)

Вопрос или проблема

Я хотел развернуть свое первое JavaFX JDK 11 приложение с использованием IntelliJ.
Я действовал следующим образом:
Файл -> Структура проекта -> Артефакты -> MyApp.jar -> ОК

Затем:

Сборка -> Сборка артефактов -> Сборка
Однако я получил следующую ошибку:
Ошибка: Java FX Packager: Не удается собрать артефакт – fx:deploy недоступен в этом JDK

Я прочитал, что последняя версия JDK, поддерживающая этот способ упаковки, – это JDK 10.
Поэтому я переключил свой проект с JDK 11 на JDK 10, но проблема все еще присутствует.
Приложение компилируется и работает хорошо в IDE.

Есть ли предложения, как это решить?
Спасибо 🙂

Я потратил довольно много часов на исправление этого. Решение устраняет все сообщения об ошибках при попытке запустить приложение javafx, а также при попытке выполнить jar-файл вне IntelliJ.
Вам нужно отредактировать файл манифеста.
Также необходимо добавить библиотеку + иметь прокси (так сказать) основной класс, выполняемый для правильного выполнения.
Сложно объяснить. Но без последней части ничего не работает, если у вас есть “extends Application” в вашем основном классе.
Может, вы захотите взглянуть: https://www.youtube.com/watch?v=D4D7daAmpV4

Ответ или решение

Проблема, с которой вы столкнулись при попытке развернуть ваше JavaFX приложение, связана с отсутствием поддержки необходимого инструмента для создания артефактов в выбранной версии JDK. Давайте подробнее рассмотрим возможные причины проблемы и решение, которое помогут вам успешно развернуть ваше приложение.

Проблема: Невозможность сборки артефакта

Ошибка "Can’t build artifact – fx:deploy is not available in this JDK" указывает на то, что используемая вами версия Java Development Kit (JDK) не поддерживает функцию fx:deploy, необходимую для упаковки JavaFX приложений. Функция fx:deploy была доступна только в JDK 10 и более ранних версиях. С JDK 11 Oracle прекратил поддержку JavaFX в качестве части JDK, что требует использования сторонних библиотек, таких как OpenJFX.

Решение проблемы

  1. Использование OpenJFX: Вместо того чтобы использовать JDK 10, как вы уже пробовали, рекомендуется использовать OpenJFX, который является открытой версией JavaFX. Убедитесь, что вы добавили требуемые зависимости OpenJFX в ваш проект.

  2. Добавление зависимостей: Если вы используете систему сборки, такую как Maven или Gradle, добавьте необходимые зависимости. Например, для Maven вы можете использовать следующий код в вашем pom.xml:

    <dependency>
       <groupId>org.openjfx</groupId>
       <artifactId>javafx-controls</artifactId>
       <version>17.0.1</version>
    </dependency>

    Для Gradle:

    implementation 'org.openjfx:javafx-controls:17.0.1'
  3. Настройка манифеста: Убедитесь, что файл манифеста вашего JAR-файла правильно настроен. Ваша основная класс-программа, которая расширяет Application, должна быть указана в манифесте. Пример:

    Manifest-Version: 1.0
    Main-Class: com.example.Main

    Обратите внимание, что указывать путь к главному классу нужно с учетом пакета.

  4. Создание «прокси» класса: Если у вас есть специфические требования к запуску вашего приложения, может потребоваться создание «прокси» класса, который будет выполнять необходимые предварительные действия перед запуском вашего JavaFX приложения:

    public class Launcher {
       public static void main(String[] args) {
           MyApp.main(args); // вызов вашего основного класса
       }
    }
  5. Экспорт и упаковка: Вместо использования встроенной функции упаковки IntelliJ, рассмотрите возможность использования инструментов сборки, таких как jlink, чтобы создать самодостаточный исполняемый файл для вашего JavaFX приложения. Это упростит развертывание и сделает ваше приложение более независимым от настроек JDK на целевой машине.

Заключение

Следуя этим шагам, вы сможете успешно решить проблемы, связанные с развертыванием вашего JavaFX приложения. Регулярные обновления и ознакомление с изменениями в JDK и JavaFX помогут вам избегать подобных ситуаций в будущем. Обратите внимание на официальную документацию OpenJFX, чтобы быть в курсе последних изменений и появлений новых функций. Успехов в ваших проектах!

Оцените материал
Добавить комментарий

Капча загружается...