我正在尝试使用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) 我有一个有趣的担忧.我习惯了多模块Maven项目.现在我正在调查如何做同样的事情,但也使用Jigsaw.是的,每个Maven模块只能有一个Jigsaw模块吗?在IDE中,我无法在同一个Maven模块中创建第二个.
那么,到目前为止,是否有任何约定或解决方法如何组合模块的两面?
我的JavaFx应用程序从源代码运行得很好,但是当我编译为单个 jar 文件时,出现错误:
错误:缺少 JavaFX 运行时组件,运行此应用程序需要这些组件。
我正在Maven用作我的存储库管理器,并且我的 Maven 安装成功。
注意:在我的Intellij构建工件中,我可以看到Intellij包含JavaFx及其所有库
我正在尝试使用maven-shade-plugin但收到警告:
javafx-controls-18.0.1-win.jar、javafx-graphics-18.0.1-win.jar、javafx-media-18.0.1-win.jar、javafx-web-18.0.1-win.jar 定义 1 个重叠资源:
- META-INF/substrate/config/resourcebundles javafx-graphics-18.0.1-win.jar、javafx-media-18.0.1-win.jar、javafx-web-18.0.1-win.jar 定义 2 个重叠资源:
- META-INF/substrate/config/jniconfig-x86_64-linux.json
- META-INF/substrate/config/reflectionconfig-x86_64-linux.json javafx-base-18.0.1-win.jar,javafx-controls-18.0.1-win.jar,javafx-graphics-18.0.1-win.jar定义 1 个重叠资源:
- META-INF/substrate/config/reflectionconfig.json maven-shade-plugin 检测到某些类文件存在于两个或多个 JAR 中。发生这种情况时,只会将该类的一个版本复制到 uber jar 中。通常这没有什么害处,您可以跳过这些警告,否则尝试根据 mvn dependency:tree -Ddetail=true 和上述输出手动排除工件。请参阅 https://maven.apache.org/plugins/maven-shade-plugin/
此警告可能会发生变化(可能来自我的行为)。
我试图用这个来修复它,但它不起作用:
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*</exclude>
</excludes>
</filter>
</filters>
Run Code Online (Sandbox Code Playgroud)
由于 Shadow-jar 由于错误而无法启动,我开始尝试修复此警告:
错误:缺少 JavaFX 运行时组件,并且需要运行该应用程序
请告诉我如何修复此错误并运行shade-jar?
我的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>TEST</artifactId>
<version>1.0</version>
<name>TEST</name>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>5.8.2</junit.version>
<javafx.version>18.0.1</javafx.version>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>${javafx.version}</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-web</artifactId>
<version>${javafx.version}</version>
</dependency>
<dependency> …Run Code Online (Sandbox Code Playgroud)