У меня есть небольшой тестовый проект maven для создания очень простого приложения javaFX.Я установил Maven, что он создает (установить задачу) файл .jar, включая все зависимости для этого проекта.Поскольку javaFX не является частью стандартных JRE / JDK, считается хорошей идеей.
Я уже смог успешно запустить приложение на моем ПК с Windows10, просто дважды щелкнув по банке с зависимостями,Построение этого без зависимостей приводит к ошибке, так как javaFX отсутствует в JRE.Пока все хорошо.
Однако, сидя на моем ПК с Manjaro Linux, я не могу запустить приложение.
Код проекта на 100% идентичен (только что клонирован репо).Двойной щелчок на .jar не работает, равно как и попытка выполнить его из терминала с помощью «java -jar APP», что приводит к ошибке «Отсутствуют используемые компоненты javaFX».Что мне здесь не хватает, зависимости должны быть связаны с .jar, кроме того, он работает под Windows?Кстати, я использую JDK 12.0.2 в Linux.
Вот мой pom.xml
<?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>iffuw</groupId>
<artifactId>javaFX-test</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- build a jar with all dependencies -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>Main</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls -->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-base -->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-base</artifactId>
<version>13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-fxml -->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>13</version>
</dependency>
</dependencies>
</project>
Кроме того, у моей версии Java по умолчанию есть библиотеки javaFX:
ls -l /usr/lib/jvm/java-12-openjdk/lib | grep javafx
-rw-r--r-- 1 root root 744481 17. Aug 18:39 javafx.base.jar
-rw-r--r-- 1 root root 2508117 17. Aug 18:39 javafx.controls.jar
-rw-r--r-- 1 root root 125617 17. Aug 18:39 javafx.fxml.jar
-rw-r--r-- 1 root root 4349165 17. Aug 18:39 javafx.graphics.jar
-rw-r--r-- 1 root root 263870 17. Aug 18:39 javafx.media.jar
-rw-r--r-- 1 root root 113 17. Aug 18:39 javafx.properties
-rw-r--r-- 1 root root 87714 17. Aug 18:39 javafx.swing.jar
-rw-r--r-- 1 root root 36678 17. Aug 18:39 javafx-swt.jar
-rw-r--r-- 1 root root 702059 17. Aug 18:39 javafx.web.jar
-rwxr-xr-x 1 root root 26288 17. Aug 18:39 libjavafx_font_freetype.so
-rwxr-xr-x 1 root root 18024 17. Aug 18:39 libjavafx_font_pango.so
-rwxr-xr-x 1 root root 18024 17. Aug 18:39 libjavafx_font.so
-rwxr-xr-x 1 root root 239280 17. Aug 18:39 libjavafx_iio.so
Что мне здесь не хватает?
РЕДАКТИРОВАТЬ
Извините, я просто не понимаю.Проект с вышеупомянутым pom.xml отлично работает на ПК с Windows10!Сборка его в моем Manjaro Linux и использование «java -jar APPLICATION» всегда выдает ошибку вроде «Отсутствуют необходимые классы JavaFX».Почему он выполняется в Windows, а не в Linux?
Есть ли лучшая практика для создания приложения JavaFX с использованием maven, которое определенно работает на всех системах, где установлена базовая JRE?
EDIT_2
Я только что обнаружил, что под Windows10 я могу просто запустить приложение, дважды щелкнув по нему.Из cmd «java -jar APPLICATION» выдает ту же ошибку, что и в Linux «Ошибка: отсутствуют компоненты времени выполнения JavaFX, и они необходимы для запуска этого приложения».Но пропуская "java -jar" в cmd, программа запускается.При попытке запустить его под Linux, опуская java -jar с помощью «./APPLICATION.jar», я получаю сообщение об ошибке «Невозможно выполнить двоичный файл: ошибка в формате файла».
EDIT_3
Так что мне удалось изменить приложение так, чтобы его можно было запускать (как после сборки на Linux, так и в Windows) через "java -jar APPLICATION.jar".Построение одной банки со всеми зависимостями работало.Предложение от одного из прокомментированных вопросов сделало сделку.Мне пришлось «очистить» Main.java, чтобы он не расширял Приложение из JavaFX.Простое создание «NewMain», которое ничего не расширяет и просто вызывает Main.main (args), было решением.
Однако, это решение - обходной путь, действительно ли это единственный вариант?