Создаем JavaFX 2 приложение используя Maven

Вы уже скорее всего создавали JavaFX приложения выбирая в IntellijIDEA создание JavaFX проекта, но он создается не на основе инструмента Maven, в этом уроке мы с вами разберемся как это сделать, а точней как создать JavaFX приложение используя Maven.

Создать JavaFX проект не проблема, но если идет речь о использовании Maven, то простое File->New Project->JavaFX уже не подойдет. Если вы еще не создавали JavaFX проектов, то к примеру в этом уроке вы можете освоить создание JavaFX приложения ‘Конструктор форм JavaFX Scene Builder в Intellij IDEA‘.

 

Шаг 1

Создаем Maven проект, так как у нас цель создать JavaFX приложение используя Maven.

После этого шага у вас создастся пустой Maven проект.

 

Шаг 2

Для того чтобы сделать с этого проекта JavaFX2 проект нам потребуется следующий maven плагин:

<plugin>
    <groupId>com.zenjava</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>2.0</version>
    <configuration>
        <mainClass>com.devcolibri.mavenjavafxapp.MainApp</mainClass>
    </configuration>
</plugin>

В 6-й строке мы указываем класс который будет запускать наше приложение.

Вот структура проекта с файлами которые мы ниже создадим:

А вот полностью содержимое файла pom.xml, который является конфигурационным файлом Maven:

<?xml version="1.0" encoding="UTF-8"?>
<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>ExampleMavenJavaFX</groupId>
    <artifactId>ExampleMavenJavaFX</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <build>
        <plugins>

            <plugin>
                <groupId>com.zenjava</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>2.0</version>
                <configuration>
                    <mainClass>com.devcolibri.mavenjavafxapp.MainApp</mainClass>
                </configuration>
            </plugin>

        </plugins>
    </build>

</project>

 

Шаг 3

Теперь создадим класс, который мы указали в maven плагине и который отвечает за запуск приложения src\main\java\com\devcolibri\mavenjavafxapp\MainApp.java:

package com.devcolibri.mavenjavafxapp;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class MainApp extends Application {

    public static void main(String[] args) throws Exception {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        String fxmlFile = "/fxml/hello.fxml";
        FXMLLoader loader = new FXMLLoader();
        Parent root = (Parent) loader.load(getClass().getResourceAsStream(fxmlFile));
        stage.setTitle("JavaFX and Maven");
        stage.setScene(new Scene(root));
        stage.show();
    }
}

Теперь этот класс будет использоваться maven плагином для запуска приложения.

 

Шаг 4

Создаем src\main\resources\fxml\hello.fxml файл, который является отображением Scene нашего окна.

И после кликаем по нему правой кнопкой мыши и выбираем Open in SceneBuilder

После этого откроется окно SceneBuilder и в нем вы можете скомпоновать вид вашего приложения, у меня вышло так:

А в виде разметки он выглядит так:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" 
            minHeight="-Infinity" minWidth="-Infinity" prefHeight="158.0" 
            prefWidth="247.0" xmlns:fx="http://javafx.com/fxml/1" 
            xmlns="http://javafx.com/javafx/2.2" 
            fx:controller="com.devcolibri.mavenjavafxapp.controller.MainController">
  <children>
    <Label layoutX="24.0" layoutY="14.0" text="Login:" />
    <Label layoutX="24.0" layoutY="63.0" text="Password:" />
    <TextField layoutX="24.0" layoutY="30.0" prefWidth="200.0" />
    <PasswordField layoutX="24.0" layoutY="86.0" prefWidth="200.0" />
    <Button layoutX="168.0" layoutY="124.0" mnemonicParsing="false" text="Log In" />
  </children>
</AnchorPane>

Как вы видите в наш FXML использует контроллер, поэтому давайте его создадим, но пока оставим его пустым.

package com.devcolibri.mavenjavafxapp.controller;

public class MainController {
}

В будущем мы сможем писать какую-то логику в этом контролере.

 

Шаг 5

Теперь давайте соберем наше приложение с помощью Maven Install:

3264_5

Урок создан: 17 октября 2013 | Просмотров: 24849 | Автор: Александр Барчук | Правила перепечатки


Добавить комментарий

Добавить комментарий

Ваш e-mail не будет опубликован.

Комментарии:

  • 20 октября 2013 в 14:57

    Сергей

    Собрал исполняемый jar с помощью Maven. При запуске файла ничего не происходит. Так должно быть или должно открыться окошко которое мы создавали в Scene Builder?

  • 07 марта 2014 в 11:36

    Денис

    Добавьте, что для сборка исполняемого джарника осуществляется плагином zenjava через свою команду.

  • 11 июля 2014 в 12:27

    zyablitsin

    Для тех кто, не понял ответ @Денис:
    mvn clean jfx:jar — комманда соберет проект в двух экземплярах.
    Причем нормально запускаемый файл будет находится в папке «Имя_проекта/target/jfx/app», а сторонние библиотеки, описанные в pom-файле, в папке «target/jfx/app/lib» (в манифесте вашей «второй» jar-ки ( «Имя_проекта/target/jfx/app/….jar», а не «Имя_проекта/target/…jar») это будет указано).
    При дистрибюции отдавать как jar-ку, так и папку «target/jfx/app/lib» которая должна лежать рядом с исполняемым файлом.
    Взято с сайта http://zenjava.com/ и проверено лично.

  • 11 июля 2014 в 12:33

    zyablitsin

    И самое главное перед сборкой не забыть
    mvn com.zenjava:javafx-maven-plugin:2.0:fix-classpath
    Когда спросит, ответить «y».
    Без этого не соберется, ибо этот косяк Oracl-ы до сих пор не исправили (обещают исправить в 8-й jav-е).

    • 11 июля 2014 в 13:03

      Александр Барчук

      Спасибо за детальное объяснение, я к сожилению не успел разобрать этот вопрос.

      • 11 июля 2014 в 15:24

        zyablitsin

        Кто бы знал сколько я на эти танцы с бубном время убил ;)

        • 11 июля 2014 в 16:21

          Александр Барчук

          Ценю ваш труд :) Будет желание начать делится своими достижениями Java FX пишите мне на почту или вк.

      • 10 октября 2014 в 14:53

        Anton Ustinov

        Привет, не могу собрать проект через maven.

        Все советы выше, не дают результата…

        • 19 июля 2015 в 08:41

          Andr

          Через maven не собирал , собирал через gradle https://github.com/andxbes/photoshop- (кр по комп графике ) . В консоли в директори где gradlew , выполнить команду gradlew run (запуск программы ) , для сборки «запускаемого jar «, там создана задача customJar , выполнить так же в консоли gradlew customJar или gradlew build . А так использую Netbeans/Eclipse c плагинами gradle , которые тут почему-то призерают .

          • 08 октября 2015 в 17:30

            OmenRa

            используй Idea. И будет тебе счастье

  • 06 сентября 2015 в 19:19

    ApollonSkill

    Спасибо большое, все ок!!!

  • 08 декабря 2016 в 23:21

    Иван

    Для всех ищущих: Вот интересный сайт, который генерит плагин за вас. http://javafx-maven-plugin.github.io/