Maven JavaFx 项目编译但从控制台运行给出“缺少 JavaFX 应用程序类”错误消息

我正在将我的 Maven JavaFX 应用程序从 Java 8 迁移到 Java 11。我已将我的 pom.xml 中的插件更新为最新的(符合 Java 11 的)插件。编译运行良好,在“目标”文件夹下的正确目录中为我提供了 jar 和所有依赖项和模块,但是当我尝试运行我的 jar 文件时,我得到了可怕的“缺少 JavaFX 应用程序类”错误。无论我如何尝试更改插件配置 - 我总是收到此错误消息并且应用程序将无法运行。


现在,更多的发现: 1. 主类确实驻留在类和 jar 下的正确文件夹中。2. Manifest 文件在正确的位置并包含主类属性(在 Java 8 下运行良好)。


这是相关部分


<plugin>

        <artifactId>maven-compiler-plugin</artifactId>

        <version>3.8.0</version>

        <configuration>

            <source>11</source>

            <release>11</release>

            <showWarnings>true</showWarnings>

            <showDeprecation>true</showDeprecation>

            <compilerVersion>11</compilerVersion>

        </configuration>

        <dependencies>

            <dependency>

                <groupId>org.ow2.asm</groupId>

                <artifactId>asm</artifactId>

                <version>7.0</version>

            </dependency>

        </dependencies>

</plugin>

<plugin>

        <artifactId>maven-jar-plugin</artifactId>

        <configuration>

            <archive>

                <manifest>

                   <addClasspath>false</addClasspath>

                   <mainClass>${mainClass}</mainClass>

                </manifest>

                <manifestEntries>

                   <JavaFX-Application-Class>${mainClass}</JavaFX-Application-Class>

                </manifestEntries>

             </archive>

             <outputDirectory>${project.build.directory}/libs</outputDirectory>

        </configuration>

</plugin>


我通过包含文档中描述的 JavaFX 模块来运行 jar:


java -verbose --module-path ../mods \

    --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.swing \

     -jar jar-file-name.jar \

     package.class.MainClass

在我的挫折中,我尝试了无数的配置,包括使用 JavaFx Java 11 示例中的配置。没有任何效果。


有任何想法吗?


一只甜甜圈
浏览 367回答 1
1回答

青春有我

我在https://github.com/javafxports/openjdk-jfx/issues/236找到了一种解决方法。此解决方法包括创建一个新的常规(非 Java Fx)类,该类将成为 Jar 的主类,并且该类将启动基于 JavaFx 的原始应用程序类。这是我找到解决方法的链接中的新类:public class Main {&nbsp; &nbsp; public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp; HelloFX.main(args);&nbsp; &nbsp; }}希望这可以帮助某人。我没有将此答案标记为正确答案,因为它是一种解决方法而不是真正的解决方案。编辑:事实证明,这里的 JavaFX 文档中描述的解决方法:https ://openjfx.io/openjfx-docs/#modular正如这里所解释的,为了创建一个包含所有必需的 JavaFX 依赖项的可运行 jar,您将需要使用一个不从 Application.js 扩展的启动器类。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java