繁体   English   中英

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

[英]Maven JavaFx project compiles but running from console give “Missing JavaFX application class” error msg

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

现在,有更多发现:1.主类确实位于类和jar中的正确文件夹中。 2. Manifest文件在正确的位置,并且包含main class属性(在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>
<plugin>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
                <execution>
                        <id>copy-libs</id>
                        <phase>prepare-package</phase>
                        <goals>
                                <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                                <outputDirectory>${project.build.directory}/libs</outputDirectory>
                                <includeScope>runtime</includeScope>
                                <excludeGroupIds>org.openjfx</excludeGroupIds>
                        </configuration>
                </execution>
                <execution>
                        <id>copy-modules</id>
                        <phase>prepare-package</phase>
                        <goals>
                                <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                                <outputDirectory>${project.build.directory}/mods</outputDirectory>
                                <includeScope>runtime</includeScope>
                                <includeGroupIds>org.openjfx</includeGroupIds>
                        </configuration>
                </execution>
        </executions>

我通过包含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示例中的配置。 没用。

有任何想法吗?

我在https://github.com/javafxports/openjdk-jfx/issues/236找到了解决方法。

此解决方法包括创建一个新的常规(非Java Fx)类,该类将成为Jar的主要类,并且该类将启动基于JavaFx的原始应用程序类。

这是我找到解决方法的链接中的新类:

public class Main {

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

希望这对某人有帮助。 由于这是一种解决方法而不是真正的解决方案,因此我并未将此答案标记为正确的答案。

编辑:事实证明,此处的JavaFX文档中描述了解决方法: https//openjfx.io/openjfx-docs/#modular

如此处所述,为了创建具有所有必需的JavaFX依赖关系的可运行jar,您将需要使用不从Application扩展的启动程序类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM