【发布时间】:2019-11-21 11:37:54
【问题描述】:
我正在使用 Java 8 和 JavaFX。当我将我的可执行文件JAR 与maven 打包在一起时,可执行文件JAR 使用Java 8 可以正常工作。但是,如果我使用例如运行JAR Java 13,我收到以下错误:
Error: Could not find or load main class ApplicationLauncherClient
Caused by: java.lang.NoClassDefFoundError: javafx/application/Application
这可能是由于JavaFX 没有与JRE/JDK 捆绑在一起,因为Java 11。
我的pom.xml 构建配置如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>ApplicationLauncherClient</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
我的目标是通过在可执行文件JAR 中包含JavaFX 来指示maven 构建一个JAR,它可以在任何大于或等于8 的Java 版本上运行。
我没有按照this 答案中的说明成功(例如,将JavaFX 插件添加到我的pom.xml)。 Including OpenJFX as dependency 也没有工作,我仍然收到同样的错误。
【问题讨论】:
-
您从问题中链接的 zenjava javafx maven 插件已过时,您应该使用 org.openjfx 插件,如 [run HelloWorld via Maven] 帖子中所示,您不需要创建使用程序集插件程序集。
-
您的目标是拥有一个 jar 到“我的目标是通过在可执行 JAR 中包含 JavaFX,指示 maven 构建一个可以在任何大于或等于 8 的 Java 版本上运行的 JAR。”可能证明很困难,JavaFX 通常是支持它的 Java 8 发行版的 JRE 的一部分,它仅被设计为以后版本(例如 11+)中的单独库。
-
您可能希望create a runtime image(包括 JRE)而不是尝试创建可以与预安装的 JRE 一起使用的可执行 JAR。
-
糟糕,在之前的评论中错过了指向 HelloWorld via Maven 的链接。
-
另一种选择是jpackage,如果可用的话。