Я хотел бы поделиться своими выводами о запуске приложения javafx 11. Я говорю о существующем унаследованном приложении javafx, изначально разработанном без модулей (например, с Java 8).
Наиболее интересным способом IMO является Метод # 2b ниже, который требует минимума изменений, , т.е. ему не нужно -module-path
аргумент . Я упоминаю, что я использую Maven, поэтому ср. В предыдущих ответах первым шагом является добавление зависимости в вашем pom.xml
в сторону javafx. E.g.:
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11.0.2</version>
</dependency>
Для запуска я нашел несколько вариантов:
1a) Запуск с помощью maven из командной строки
Настройте в вашем pom.xml
раздел, например:
<build>
<plugins>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>org.openjfx.hellofx.MainApp</mainClass>
</configuration>
</plugin>
</plugins>
</build>
После этого из окна консоли вы можете запустить mvn exec:java
, и это должно запустить приложение. Maven позаботится о добавлении всех записей из classpath в путь к модулю . Я напоминаю ярлык CTRL + ALT + T
в Eclipse, который открывает окно терминала прямо в IDE.
1b) Запуск с использованием maven, но в качестве конфигурации запуска Eclipse
Щелкните правой кнопкой мыши проект> Запуск от имени> Maven Build ... . Затем введите exec:java
в текстовом поле Goals . Преимущество по сравнению с предыдущим методом: немного более интегрировано в Eclipse. И легкая отладка. Вам нужно только перезапустить конфигурацию запуска в режиме отладки и все. Позвольте напомнить, что конфиги запуска Eclipse могут храниться в виде файлов .launch
непосредственно в каталоге проекта (репо), что позволяет коллегам использовать их / использовать повторно. Используйте последнюю вкладку, Общие , в Редактировать конфигурацию .
2a) Запустите с помощью Eclipse и укажите -module-path
с помощью переменной
Щелкните правой кнопкой мыши основной класс> Запуск от имени> Java-приложение . При первом щелчке создается новая конфигурация запуска; возможно, это не сработает, поэтому вам нужно отредактировать его (например, ** кнопку «Выполнить» (с иконкой «Play») на панели инструментов> «Выполнить настройки»> выберите тот, который соответствует вашему классу. Или CTRL + click
на нем после нажатия Play ).
Затем добавьте это в Аргументы> ВМ аргументы :
--module-path ${project_classpath:REPLACE_ME_WITH_YOUR_PROJECT_NAME} --add-modules javafx.controls,javafx.fxml
Так что хитрость в том, чтобы использовать переменную ${project_classpath}
. Потому что в противном случае вам нужно было бы написать именно путь к банке javafx, который находится где-то в вашем .m2
репо. Это может затруднить повторное использование конфигурацией запуска коллегами.
2b) Запуск с использованием Eclipse БЕЗ указания -module-path
Это la piece of resisistence , которое я обнаружил по ошибке после примерно 5 часов работы Java 11 с модулями "fun". Ваше приложение может работать из коробки, не касаясь -module-path
. Разумеется, библиотеки javafx все еще должны быть в вашем classpath (но это обрабатывается mvn). Трюк (ср. это ), что ваше основное приложение НЕ ДОЛЖНО расширяться Application
(например, MyApplication
ниже). Если это ваш случай, то создайте новый класс с функцией main()
, которая выполняет, например ::1010 *
Application.launch(MyApplication.class);
Примечание
В моем случае (то есть в Windows с JDK 8 по умолчанию в системе) существует известная проблема с запуском javafx. Решение состоит в том, чтобы добавить следующий аргумент VM: -Djava.library.path=C:
. Так что на самом деле для всех 4 методов, описанных выше, мне нужно было добавить это.