Sau rất nhiều lần thử, cuối cùng tôi đã giải quyết được vấn đề của mình và để giúp những người khác, tôi đăng giải pháp ở đây.
Cấu trúc dự án phải như thế này
và pom.xml phải như thế này
<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.client</groupId>
<artifactId>JavaClient</artifactId>
<version>5.2.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>JavaClient</name>
<properties>
<exec.mainClass>com.client.MainApp</exec.mainClass>
<javafx.version>2.2.67</javafx.version>
<fx.home>${java.home}/lib/jfxrt.jar</fx.home>
<javafx.tools.ant.jar>${java.home}/../lib/ant-javafx.jar</javafx.tools.ant.jar>
<javafx-dialogs.jar>${project.basedir}/lib/javafx-dialogs-0.0.1.jar</javafx-dialogs.jar>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<dist.dir>${project.build.directory}/deploy</dist.dir>
<base.dir>${project.basedir}</base.dir>
</properties>
<dependencies>
<dependency>
<groupId>org.oracle</groupId>
<artifactId>javafx</artifactId>
<version>${javafx.version}</version>
<systemPath>${fx.home}</systemPath>
<scope>system</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>xmlpull</groupId>
<artifactId>xmlpull</artifactId>
<version>1.1.3.1</version>
</dependency>
<dependency>
<groupId>xpp3</groupId>
<artifactId>xpp3_min</artifactId>
<version>1.1.4c</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>javafx-dialogs</artifactId>
<version>0.0.1</version>
<scope>system</scope>
<systemPath>${javafx-dialogs.jar}</systemPath>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.0.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.9</version>
<configuration>
<includes>
<include>**/*Test.class</include>
</includes>
</configuration>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>create-temp-jar</id>
<phase>prepare-package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target xmlns:fx="javafx:com.sun.javafx.tools.ant">
<taskdef uri="javafx:com.sun.javafx.tools.ant" resource="com/sun/javafx/tools/ant/antlib.xml"
classpath="${project.basedir}:${javafx.tools.ant.jar}:${fx.home}" />
<fx:jar
destfile="${project.build.directory}/${project.build.finalName}-temp">
<fx:application id="fxApp" name="${project.name}"
mainClass="${exec.mainClass}" />
<fx:fileset dir="${project.build.directory}/classes" />
<manifest>
<attribute name="Implementation-Vendor" value="${app.vendor}" />
<attribute name="Implementation-Title" value="${app.name}" />
<attribute name="Implementation-Version" value="1.0" />
</manifest>
</fx:jar>
<attachartifact
file="${project.build.directory}/${project.build.finalName}-temp.jar"
classifier="temp" />
</target>
</configuration>
</execution>
<execution>
<id>create-deployment-bundle</id>
<phase>install</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target xmlns:fx="javafx:com.sun.javafx.tools.ant">
<taskdef uri="javafx:com.sun.javafx.tools.ant" resource="com/sun/javafx/tools/ant/antlib.xml"
classpath="${project.basedir}:${javafx.tools.ant.jar}:${fx.home}" />
<fx:deploy nativeBundles="all" width="100" height="100"
outdir="${dist.dir}" embedJNLP="true" outfile="${project.build.finalName}"
verbose="true">
<fx:application name="${project.build.finalName}"
mainClass="${exec.mainClass}" />
<fx:resources>
<fx:fileset dir="${project.build.directory}" includes="${project.build.finalName}.jar" />
</fx:resources>
<fx:info title="${project.build.finalName}" vendor="NUAXIS"
description="Test built from Java executable jar" />
<fx:permissions elevated="true" />
</fx:deploy>
</target>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptors>
<descriptor>src/main/assembly/jar-with-dependencies.xml</descriptor>
</descriptors>
<finalName>${project.build.finalName}</finalName>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifestEntries>
<JavaFX-Version>${javafx.version}</JavaFX-Version>
<JavaFX-Application-Class>${exec.mainClass}</JavaFX-Application-Class>
<Main-Class>com/javafx/main/Main</Main-Class>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
Bây giờ tôi sẽ giải thích cho bạn sai lầm của tôi. xem kỹ phần xây dựng của Câu hỏi. trong plugin ant-run khi chúng tôi truy cập vào tác vụ fx:deploy ở đây, bạn thấy rằng tôi có mục nhập là class-path. tôi đã nhầm lẫn phần này rất đơn giản. nhìn bây giờ trong Pom của tôi ở đây. đường dẫn lớp hiện đã được cập nhật. đầu tiên tôi đề cập đến dir cơ sở sau đó đến đường dẫn ant-fx-plugin rồi đến đường dẫn jfxrt.jar. jfxrt có thể không cần thiết. sau khi này, tôi đã loại bỏ phần phụ thuộc của plugin. điều này là quan trọng. nếu tôi không xóa phần này thì plugin antrun của tôi sẽ dễ dàng nhìn vào các phần phụ thuộc do maven cung cấp nhưng không có trong ant-classpath. theo thứ tự ant-classpath là rất quan trọng. basedir của bạn phải luôn đến trước ant-run.jar. đó là nó
Hy vọng Điều này sẽ hữu ích cho những người sẽ đối mặt với vấn đề này.