我正在尝试使用maven依赖项创建一个JFX11自包含jar.从我所做的研究来看,似乎最好的方法是通过maven shade插件.但是,当我运行它时,我收到此错误:
错误:缺少JavaFX运行时组件,并且需要运行此应用程序
我不明白为什么会这样.我搞砸了什么?有一个更好的方法吗?我也用同样的消息尝试了maven程序集插件.
pom文件供参考
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Application</groupId>
<artifactId>Main</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>SpaceRunner</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>10</release>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>Application.Main</mainClass>
</configuration>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>
Application.Main
</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>Application.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution> …Run Code Online (Sandbox Code Playgroud) 我有一个Java 8应用程序,它使用JavaFX,主类扩展了 javafx.application.Application.目前,我将它作为胖罐提供,它在Oracle Java 8上运行良好.
现在我希望它能够在OpenJDK 11上运行.要添加JavaFX,我已经将org.openjfx中的工件添加到类路径中,并将它们包含在胖jar中.如果我从命令行启动我的jar,我明白了
Error: JavaFX runtime components are missing, and are required to run this
application
Run Code Online (Sandbox Code Playgroud)
我找到了解决此问题的两种可能方法:
虽然我可以使用1.作为一种解决方法,但我想知道目前(OpenJDK 11)构建/交付非模块化JavaFX应用程序的可执行胖罐的方法.有人可以帮忙吗?
我想不用说,我应该能够将Oracle自己的JDK与JavaFX(来自gluonhq)一起使用,以构建用户可以使用的可分发jar文件。
经过详尽的搜索,大量阅读(过去几个月中24小时或更长时间),最后是这个Google搜索查询:
how to make a fat jar -maven -gradle -scala -eclipse -ant -docker -hadoop -netbeans -jerkar -phy -mozni -yogurt -pizza - throwing -python -bacon
Run Code Online (Sandbox Code Playgroud)
我绝对在路的尽头。到底为什么这么多工作?我该如何构建JavaFX应用程序并将其提供给想要实际使用它的人,而又不知道如何使用应用程序本身呢?