gpt4 book ai didi

java - 在可执行 JAR 中将 JavaFX 库与 Maven 捆绑在一起(适用于 Java 11+)

转载 作者:行者123 更新时间:2023-12-04 04:22:03 25 4
gpt4 key购买 nike

我正在使用 Java 8JavaFX .当我打包我的可执行文件时 JARmaven , 可执行文件 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>

我的目标是指导 maven建一个 JAR可以在任何 Java 上运行版本大于或等于 8,包括 JavaFX在可执行文件中 JAR .

我没有按照 this 中的说明成功回答(例如,将 JavaFX 插件添加到我的 pom.xml 中)。 Including OpenJFX as dependency也没有工作,我仍然收到同样的错误。

最佳答案

我像这样使用 javafx-maven-plugin 和 maven-shade-plugin:

    <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
<target>8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.3</version>
<configuration>
<mainClass>Your_main_class</mainClass>
</configuration>
</plugin>
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>Your_main_class_starter</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

Your_main_class 是这样的:
public class App extends Application {

private static Scene scene;

@Override
public void start(Stage stage) throws IOException {
Parent mainForm = FXMLLoader.load(getClass().getResource("mainForm.fxml"));
scene = new Scene(mainForm , 425, 275);
stage.setScene(scene);
stage.show();
}

public static void main(String[] args) {
launch();
}
}

而 Your_main_class_starter 看起来像这样:
public class LaunchApp {
public static void main(String[] args) {
App.main(args);
}

所以 Your_main_class_starter 除了调用你的主类之外什么都不做。

关于java - 在可执行 JAR 中将 JavaFX 库与 Maven 捆绑在一起(适用于 Java 11+),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58974100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com