Если у вас есть простой (немодульный) проект JavaFX 11 (без инструментов сборки Maven / Gradle), и вы используете IntelliJ, как пример HelloFX из здесь , вот как вы можете создатьjar от IntelliJ, который можно запустить из консоли
Полное руководство по запуску проекта можно найти здесь , а инструкции по созданию jar здесь (см. Раздел Немодульный проект), но они не охватывают Artifacts
от IntelliJ.
Убедитесь, что проект HelloFX запускается из IntelliJ со следующими параметрами виртуальной машины:
--module-path ${PATH_TO_FX} --add-modules javafx.controls,javafx.fxml
, где PATH_TO_FX
был установлен в File -> Settings -> Appearance & Behavior -> Path Variables
, указывая на JavaFX SDK lib.
Полу жирная банка
Мы можем создать Jar-файл, который содержит только классы из проекта и сторонние зависимости, но не зависимости JavaFX.
Перейдите на File -> Project Structure -> Artifacts -> Add -> JAR -> From modules with dependencies
, добавьте свой основной класс, примите.
Затем удалить JavaFX jars из списка и принять.
Создайте проект, он создаст довольно маленькую банку (в данном случае 3 КБ).
Теперь вы сможете запустить его следующим образом:
java --module-path %PATH_TO_FX% --add-modules javafx.controls,javafx.fxml -jar out\artifacts\HelloFX_jar\HelloFX.jar
(убедитесь, что %PATH_TO_FX%
указывает на допустимую папку и используйте кавычки, если она содержит пробелы.
Вы можете распространять этот jar-файл и запускать его на других платформах, предоставляя такжеиметь JavaFX SDK.
Fat Jar
Если вам нужен полный полный Jar-файл с зависимостями JavaFX, вы все равно можете использовать Artifacts.
Goк File -> Project Structure -> Artifacts -> Add -> JAR -> From modules with dependencies
, добавьте свой основной класс, примите.
Затем оставьте JavaFX jars из списка и примите.Создайте проект.
Теоретически вы можете запустить его следующим образом:
java -jar out\artifacts\HelloFX_jar\HelloFX.jar
Но это не сработает.
Причина 1: Вам нуженкласс запуска, как объяснено здесь .
Итак, создайте класс запуска:
public class Launcher {
public static void main(String[] args) {
Main.main(args);
}
}
Причина 2: Если вы добавляете только свои SDK-баночки в толстую банку, выбудут отсутствовать собственные библиотеки, как объяснено здесь .
Поэтому отредактируйте артефакт, выберите класс Launcher в качестве основного класса и добавьте собственные библиотеки (Directory Content -> path-to/JavaFX SDK/bin
в Windows):
Теперь соберите проект (теперь jar составляет около 33 МБ и содержит ненужные собственные библиотеки) и запустите:
java -jar out\artifacts\HelloFX_jar\HelloFX.jar
Вы можете распространять этот jar-файл, но только для платформ Windows.
Вы можете создавать подобные jar-файлы для других платформ, если вы загружаете их JavaFX SDK, а также можете создавать кроссплатформенные jar-файлы, если вы добавляете их все вместе, как объяснено в связанных ответах выше.
В любом случае, вам следует рассмотреть возможность использования jlink
вместо .
Примечание
Об этой ошибке:
Причина: java.lang.ClassNotFoundException: Files \Java \ javafx-sdk-11.0.1 \ lib
похоже, что путь к библиотеке был задан без кавычек и отсутствует первая часть пути C:\Program Files\...
.Просто убедитесь, что вы используете кавычки:
set PATH_TO_FX="C:\Program Files\Java\javafx-sdk-11.0.1\lib"