JavaFX не может создать артефакт - fx: deploy недоступен в этом JDK

У меня есть проект JavaFX, который я хотел бы создать как Jar-файл. Однако когда я пытаюсь это сделать, я получаю сообщение об ошибке.

Error:Java FX Packager: Can't build artifact - fx:deploy is not available in this JDK

Я обнаружил аналогичную проблему здесь с прошлого года, но это казалось вроде они ничего не пришли к выводу.


person Mr. Nielzom    schedule 21.02.2019    source источник


Ответы (2)


Это происходит потому, что либо у вас установлено много JDK, которые компилируются другим и запускаются другим, либо вы используете функцию jar приложения Javafx при создании артефактов в Intellij, что, к сожалению, не работает. Прежде чем приступить к выполнению следующих шагов, убедитесь, что вы компилируете и используете одну и ту же версию JDK. Вот как это исправить:

1 - Создайте класс Launcher:

Класс Launcher будет вызывать основной класс JavaFx, из которого запускается ваше приложение. Выбор сделать Jar напрямую через основной класс приведет к ошибке, выдающей следующую ошибку:

    Error: Could not find or load main class Main
    Caused by: java.lang.ClassNotFoundException: Main 

Ваш класс Launcher должен выглядеть примерно так:

    public class Launcher {
        public static void main(String[] args) {
            MainGUI.main(args);
        }
    }

2 - Приступаем к постройке Фляги

  1. Вероятно, у вас еще есть META-INF папка из предыдущей сборки, поэтому удалите ее.

  2. Создайте проект как JAR:
    Файл-> Структура проекта -> Артефакты -> "+" -> JAR-> из модулей с зависимостями ..

  3. Выберите класс Launcher для своего основного и установите флажок «скопировать в выходной каталог и связать через манифест» и нажмите «ОК».

  4. Нажмите Применить, затем ОК.

  5. перейдите в Build -> Build artifacts-> Rebuild

person AM429    schedule 22.05.2020
comment
Вот отличное видео, объясняющее второй вариант: youtube.com/watch? v = HGHu-SzL-5E & ab_channel = AlexHorea - person Dan A.S.; 02.12.2020

На веб-сайте JetBrains я нашел хорошую статью о том, Пакетирование приложений JavaFX что было действительно полезно. В разделе #troubleshoot говорится, что,

Error:Java FX Packager: Can't build artifact – fx:deploy is not available in this JDK

Задача fx:deploy была частью подключаемого модуля Ant, который ранее распространялся в ant-javafx.jar как часть Java Packager. Плагин Ant не включен в jpackage в текущих версиях JDK.

Если вы используете сборку JDK версии 9 и новее, используйте сторонние решения для упаковки. Например, обратитесь к разделу Runtime images в официальной документации JavaFX.

person Tharindu Sathischandra    schedule 27.08.2020
comment
Это хорошее резюме. Кроме того, если кто-то заинтересован в упаковке приложения Java (или JavaFX) как собственного приложения (например, Windows exe, Linux rpm или deb-пакета или установленного приложения OS X dmg), рассмотрите возможность использования jpackage, реализованная как инкубационная функция в JDK 14+. Для некоторых приложений это может обеспечить лучшее соответствие требованиям, чем текущие параметры, задокументированные для JavaFX образов среды выполнения. - person jewelsea; 27.08.2020
comment
@jewelsea спасибо за упоминание о jpackage. Не могли бы вы помочь мне разобраться в этом; Я пытался создать собственный исполняемый файл для модульного проекта JavaFX Maven. С помощью javafx-maven-plugin я мог создать образ времени выполнения с помощью сценария запуска и затем, упаковав его с помощью jpackage, я получил упакованную установку exe, которая отлично работает. Но он устанавливает этот сценарий запуска. Но мне нужно установить работающий exe-файл. Есть предложения, как это сделать? - person Tharindu Sathischandra; 30.08.2020
comment
Задайте новый вопрос Таринду. Поступая так, несколько человек могут ответить, у вас будет больше шансов найти кого-то с соответствующими знаниями, чтобы создать для вас хороший ответ, и будет запись, которую кто-то может выполнить поиск, чтобы получить ответ на аналогичный вопрос. - person jewelsea; 01.09.2020