Создание файла JAR в JDK 11 и JavaFx - PullRequest
0 голосов
/ 05 декабря 2018

Как мы уже знаем, до JDK-10 JavaFX раньше был частью JDK, но с выпуском JDK-11, JavaFX должен быть включен отдельно.

Для этого нам нужно предоставить VM аргумент для JavaFX, например так: -

--module-path "C:\javafx-sdk-11.0.1\lib" --add-modules=javafx.controls,javafx.fxml

До этого момента все было в порядке, но когда мы наконец-то создаем JAR-файл для распространения, то сообщение выглядит так:

Аргументы VM не будут частью исполняемого JAR.Аргументы могут передаваться в командной строке при запуске JAR

screenshot

Поэтому теперь файл JAR не может открыть приложение.

Теперь, пожалуйста, помогите мне, предложив какой-нибудь выход, чтобы пользователь мог открыть приложение, просто щелкнув значок JAR, как это было раньше.

РЕДАКТИРОВАТЬ

После применения решения, предоставленного openjfx.io (раздел немодульные проекты), я могу сгенерировать автономный файл Jar с JavaFX.

Теперь я хочу добавить некоторые локальные зависимостикак pdfbox и Sqlite:

sqlite =C:\sqlite-jdbc-3.6.20.1.jar 
pdfbox=C:\pdfbox-app-2.0.10.jar

Я делаю следующие шаги:

Шаг-1

cd eclipse-workspace2018\test101

Шаг-2

set PATH_TO_FX="C:\javafx-sdk-11.0.1\lib"

Шаг-3

dir /s /b src\*.java > sources.txt & \
    javac --module-path %PATH_TO_FX% --add-modules=javafx.controls \
    -d out @sources.txt & del sources.txt

Шаг-4

cd out & jar xf "%PATH_TO_FX%\javafx.base.jar" & \
    jar xf "%PATH_TO_FX%\javafx.graphics.jar" & \
    jar xf "%PATH_TO_FX%\javafx.controls.jar" & \
    cd .. 
copy "%PATH_TO_FX%\..\bin\prism*.dll" out & \
    copy "%PATH_TO_FX%\..\bin\javafx*.dll" out & \
    copy "%PATH_TO_FX%\..\bin\glass.dll" out & \
    copy "%PATH_TO_FX%\..\bin\decora_sse.dll" out 
del out\META-INF\MANIFEST.MF & del out\module-info.class 
mkdir libs 
jar --create --file=libs/index101.jar \
    --main-class=test101.Launcher -C out . 
java -jar libs\index101.jar

Пожалуйста, измените мои шаги для добавления вышеупомянутых двух зависимостей pdfBox & sqlite.

1 Ответ

0 голосов
/ 17 декабря 2018

Прежде всего, совет: создавать толстые фляги в командной строке вообще не рекомендуется.Это ручной процесс, который следует избегать.Вы должны попробовать Maven или Gradle и существующие плагины для этой задачи, на случай, если вам все еще нужен толстый кувшин.Вместо этого вы должны попытаться создать модульный проект и создать пользовательский образ с jlink, который вы можете распространять для данной платформы.

Во-вторых, если вы все еще хотите сделать толстую банку вручную, вам следуетпонять вышеупомянутые шаги, чтобы иметь возможность изменять их в соответствии с вашими потребностями.По сути, основная идея толстого фляги - это отдельный проект со всеми файлами * .class (и другими ресурсами) из всех возможных зависимостей, а не только из вашего исходного кода.В руководстве по openjfx.io только упоминается случай зависимостей JavaFX.

Так что, если у вас есть дополнительные зависимости, идея состоит в том, чтобы извлечь содержимое их jar-файлов, так же, как вы извлекаете jar-файлы JavaFX.См. jar параметры команды, такие как xf.

. Это делается на шаге 3:

cd out & jar xf "%PATH_TO_FX%\javafx.base.jar" & \
    jar xf "%PATH_TO_FX%\javafx.graphics.jar" & \
    jar xf "%PATH_TO_FX%\javafx.controls.jar" & \
    cd .. 

Вы можете изменить этот шаг с помощью существующих jar-файлов:

cd out & jar xf "%PATH_TO_FX%\javafx.base.jar" & \
    jar xf "%PATH_TO_FX%\javafx.graphics.jar" & \
    jar xf "%PATH_TO_FX%\javafx.controls.jar" & \
    jar xf "C:\sqlite-jdbc-3.6.20.1.jar" & \
    jar xf "C:\pdfbox-app-2.0.10.jar" & \
    cd .. 

Затем вы можете продолжить работу с остальными шагами таким же образом.

Обратите внимание, что, хотя это может сработать, у этих сторонних фляг также могут быть другие зависимости (см. Их pom.XML для этого).Если это так, вам нужно будет загрузить их вручную, и таким же образом добавить их в толстую банку.Если вы используете Maven или Gradle, они сделают это автоматически для вас.

Как упоминалось ранее, это вообще не рекомендуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...