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

Ubuntu22.04编译MAVGCL时遇javafx.controls模块未找到错误求助

解决Ubuntu 22.04 LTS下MAVGCL编译打包时JavaFX模块找不到的问题

问题背景

在Ubuntu 22.04 LTS编译MAVGCL(用于反编译PX4 ULog日志)时,已安装OpenJDK 17和JavaFX 17,克隆所有依赖仓库并修改pom.xml的groupId/artifactId后,执行ant deploy_linux_17编译正常,但打包生成App-image时出现Module javafx.controls not found错误,导致custom_jre目录无法创建。

错误原因

核心问题是jlink工具无法在模块路径中找到JavaFX的模块化依赖:OpenJDK默认不包含JavaFX,通过snap安装的JavaFX未正确配置到模块路径,手动编译集成的操作也未到位。

解决步骤

1. 手动安装匹配版本的JavaFX SDK

放弃snap安装方式,直接下载和OpenJDK 17匹配的JavaFX 17 SDK,解压到本地固定目录,比如/opt/javafx-sdk-17。

2. 修改Ant构建脚本,配置JavaFX模块路径

找到MAVGCL项目中的build.xml,定位到deploy_linux_17目标里调用jlink的代码段,添加JavaFX模块路径参数,并显式声明所需的JavaFX模块:

<!-- 参考修改jlink调用部分,根据实际脚本调整 -->
<exec executable="jlink">
    <arg value="--module-path"/>
    <!-- 替换为你的JavaFX lib目录 + 项目自身的模块路径 -->
    <arg value="/opt/javafx-sdk-17/lib:${project.module.path}"/>
    <arg value="--add-modules"/>
    <!-- MAVGCL通常需要这些JavaFX模块,可按需调整 -->
    <arg value="javafx.controls,javafx.fxml,javafx.graphics"/>
    <arg value="--output"/>
    <arg value="./target/custom_jre"/>
    <!-- 保留原有其他参数 -->
</exec>

如果脚本中用变量管理模块路径,直接把JavaFX的lib目录追加到对应变量中即可。

3. 先编译所有依赖仓库

在执行部署命令前,确保所有克隆的依赖项目已编译安装到本地仓库:

# 依次编译每个依赖
cd ../MAVBase && mvn clean install
cd ../mavcom && mvn clean install
cd ../mavutils && mvn clean install
cd ../mavmap && mvn clean install
# 回到MAVGCL主目录
cd ../MAVGCL/MAVGCL

4. 验证JavaFX模块路径配置

执行以下命令确认JVM能找到JavaFX模块:

java --module-path /opt/javafx-sdk-17/lib --list-modules | grep javafx

如果能列出javafx.controls等模块,说明路径配置正确。

5. 重新执行部署命令

ant clean deploy_linux_17

额外注意事项

  • JDK和JavaFX版本必须严格匹配(均为17),避免版本不兼容
  • 统一使用手动下载的JavaFX SDK,不要混合snap或其他来源的安装包
  • 确保build.xml中配置的JAVA_HOME指向你的OpenJDK 17安装目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:12:14