You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从测试类运行JavaFX应用报错:JavaFX运行时组件缺失

问题:Java17+Maven+JavaFX项目无法从测试类启动应用

我用IntelliJ JavaFX生成器创建了基于Java17和Maven的JavaFX应用,javafx-maven-plugin指定了主类,能从主类正常运行,但从测试类启动时出现错误:

Error: JavaFX runtime components are missing, and are required to run this application

最初用Java8+JavaFX构建时,主类和测试类都能正常运行。直接升级到Java17后无法运行,于是通过IntelliJ生成新项目迁移旧代码,现在仅能从主类启动应用,测试类启动失败。

补充:项目的pom.xml中javafx-maven-plugin配置片段如下:

<plugin>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>0.0.8</version>
    <executions>
        <execution>
            <!-- Default configuration for running with: mvn clean javafx:run -->
            <id>default-cli</id>
            <configuration>
                <mainClass>io.wouter.gmsbooks.offerapp/io.wouter.gmsbooks.GmsOfferApp</mainClass>
                <launcher>app</launcher>
                <jlinkZipName>app</jlinkZipName>
                <jlinkImageName>app</jlinkImageName>
                <noManPages>true</noManPages>
                <stripDebug>true</stripDebug>
                <noHeaderFiles>true</noHeaderFiles>
            </configuration>
        </execution>
    </executions>
</plugin>

疑问:是否需要给javafx-maven-plugin添加另一个指向测试类的execution?


解决方案

核心原因

Java17开始JavaFX以模块化方式发布,javafx-maven-plugin仅负责主应用的启动配置,测试类的运行由Maven的maven-surefire-plugin管理,默认情况下surefire不会自动加载JavaFX runtime组件,导致启动报错。

具体解决步骤

  • 配置Maven Surefire插件
    在pom.xml中添加或修改maven-surefire-plugin的配置,确保测试启动时加载所需的JavaFX模块:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.1.2</version>
        <configuration>
            <!-- 根据你的项目依赖添加对应的JavaFX模块 -->
            <argLine>--add-modules javafx.controls,javafx.fxml</argLine>
        </configuration>
    </plugin>
    

    如果你用到了其他JavaFX模块(如javafx.web、javafx.media),需要在--add-modules后补充对应的模块名,用逗号分隔。

  • 调整IntelliJ测试运行配置
    在IntelliJ中打开测试类的Run Configuration,在VM options输入框中添加相同的模块参数:

    --add-modules javafx.controls,javafx.fxml
    
  • 关于javafx-maven-plugin的疑问
    不需要给javafx-maven-plugin添加额外的execution,该插件的定位是处理主JavaFX应用的打包、运行和jlink打包,测试类的运行不属于它的职责范围,完全由surefire插件负责。


内容的提问来源于stack exchange,提问作者wouterio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 03:05:24