Создание проекта
Проект JavaFX — обычный проект Maven с двумя особенностями: библиотека подключается зависимостью javafx-controls, а запускается приложение через плагин javafx-maven-plugin. Плагин сам собирает правильные параметры для Java, поэтому окно открывается одной командой.
Создание из архетипа
Архетип — шаблон проекта Maven. У OpenJFX есть официальный архетип javafx-archetype-simple:
mvn archetype:generate -DarchetypeGroupId=org.openjfx -DarchetypeArtifactId=javafx-archetype-simple -DarchetypeVersion=0.0.6 -DgroupId=com.example -DartifactId=notes -Dpackage=com.example.notes -Djavafx-version=25.0.4 -DinteractiveMode=false
cd notesMaven создаст папку notes с готовой структурой:
| Файл | Что внутри |
|---|---|
pom.xml | Зависимости и плагины |
src/main/java/module-info.java | Описание модуля |
src/main/java/com/example/notes/App.java | Главный класс приложения |
src/main/java/com/example/notes/SystemInfo.java | Вспомогательный класс примера, его можно удалить |
Позже появится папка src/main/resources/com/example/notes/ — для файлов FXML и CSS.
pom.xml
Архетип пишет устаревшие настройки: Java 11 и старые версии плагинов. Замените pom.xml целиком:
<?xml version="1.0" encoding="UTF-8"?>
<!-- pom.xml -->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>notes</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.release>25</maven.compiler.release>
<javafx.version>25.0.4</javafx.version>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>${javafx.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.14.1</version>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.8</version>
<configuration>
<mainClass>com.example.notes/com.example.notes.App</mainClass>
<options>
<option>--enable-native-access=javafx.graphics</option>
</options>
</configuration>
</plugin>
</plugins>
</build>
</project>javafx-controls подтягивает javafx-graphics и javafx-base — версию для вашей операционной системы Maven выберет сам. В mainClass записаны имя модуля и класса через /. Опция --enable-native-access убирает предупреждение Java 25 о том, что JavaFX загружает свои системные библиотеки.
module-info.java
Проект JavaFX — модуль Java. Файл описывает, какие модули ему нужны и что он открывает наружу:
// src/main/java/module-info.java
module com.example.notes {
requires javafx.controls;
exports com.example.notes;
}requires подключает модуль JavaFX, а exports разрешает JavaFX создать объект нашего класса App.
Главный класс
Замените App.java на короткую версию и удалите SystemInfo.java:
// src/main/java/com/example/notes/App.java
package com.example.notes;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class App extends Application {
@Override
public void start(Stage stage) {
Label label = new Label("Привет, JavaFX " + System.getProperty("javafx.version"));
Scene scene = new Scene(new StackPane(label), 640, 480);
stage.setTitle("Заметки");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}Класс наследует Application, а метод start строит окно. Подробно его разберём в следующем уроке.
Запуск
mvn javafx:runMaven скомпилирует проект и откроет окно 640 × 480 с заголовком «Заметки». В центре — надпись «Привет, JavaFX 25.0.4». Терминал будет занят, пока окно открыто; после закрытия окна Maven напишет BUILD SUCCESS.
Частая ошибка
Если запустить App из IDE как обычный класс с методом main, программа сразу завершится с сообщением Error: JavaFX runtime components are missing, and are required to run this application. Библиотеки JavaFX при таком запуске не попадают в список модулей. Запускайте через mvn javafx:run — в IntelliJ IDEA эту команду можно найти на панели Maven: Plugins → javafx → javafx:run.