С помощью плагина JavaFX maven вы можете выполнить две цели: run
и jlink
.Первый просто запустит проект с необходимыми аргументами (--module-path
, --add-modules
), поэтому вы можете запустить его из командной строки:
mvn clean javafx:run
Конечно, это не предназначено для распространения.
javafx: jlink
Однако, если ваш проект модульный (т.е. у вас есть файл module-info.java
), вы можете установить свой плагин следующим образом:
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.2</version>
<configuration>
<mainClass>hellofx/org.openjfx.App</mainClass>
<launcher>app</launcher>
<jlinkImageName>appDir</jlinkImageName>
<jlinkZipName>appZip</jlinkZipName>
</configuration>
</plugin>
и запустите:
mvn clean javafx:jlink
Он создаст пользовательский образ среды выполнения для вашего проекта, который вы можете распространять, и вы можете добавить модуль запуска или даже архивировать его.После извлечения вам понадобится только это для запуска:
target/appdir/app
См. Параметры плагина здесь .
Плагин Shade
Вы также можете использовать maven-shade-plugin
.
Как объяснено здесь вам понадобится основной класс, который не расширяется от Application
:
Launcher.java
package org.openjfx;
public class Launcher {
public static void main(String[] args) {
App.main(args);
}
}
А теперь вы можете добавить плагин Shade к вашему пом:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation=
"org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>org.openjfx.Launcher</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
Запустить mvn clean package
, и он сгенерирует ваш толстый кувшин, которыйВы можете распространять и запускать как:
java -jar target/hellofx-1.0-SNAPSHOT.jar
Кроссплатформенный
Обратите внимание, что в обоих случаях (плагин jlink или shade) у вас будет баночка, которую вы можетераспространять только для запуска на той же платформе, что и ваша.
Однако вы можете сделать его мультиплатформенным, если вы включите также зависимости для других платформ:
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>12.0.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>12.0.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics</artifactId>
<version>12.0.1</version>
<classifier>win</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics</artifactId>
<version>12.0.1</version>
<classifier>linux</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics</artifactId>
<version>12.0.1</version>
<classifier>mac</classifier>
</dependency>