如果我尝试在 Eclipse 中运行具有经典类路径的 JavaFX 应用程序,则会收到以下警告:
WARNUNG: Unsupported JavaFX configuration: classes were loaded from 'unnamed module @7b58231a'
我尝试使用命名模块运行它。然后我收到以下错误:
java.lang.module.FindException: Module javafx.controls not found, required by JavaFxSample
模块信息如下所示:
module JavaFxSample {
requires javafx.graphics;
requires javafx.controls;
requires javafx.web;
}
build.gardle 外观:
plugins {
id 'application'
id 'org.openjfx.javafxplugin' version '0.1.0'
}
repositories {
mavenCentral()
}
sourceCompatibility = 17
javafx {
version = '' + sourceCompatibility + '.+'
modules = [ 'javafx.controls', 'javafx.web' ]
}
看起来 Gradle 已经检测到它是一个模块:
如果我将以下内容添加到 Gradle 脚本中,则不会产生任何效果:
java {
modularity.inferModulePath = true
}
我正在使用:
如何强制将 Gradle 依赖项中的模块添加到 Eclipse 内的启动器 modulpath 中?这是 JavaFX 问题还是 Eclipse/Gradle 问题?
使用 Eclipse 开发模块化 JavaFX 应用程序的入门说明位于 openjfx.io。请遵循“JavaFX 和 Eclipse:使用 Gradle 进行模块化”部分。
openjfx 入门说明中还提供了针对其他项目类型、IDE 和构建系统的说明,如果您选择的组合仍然存在问题,您可以切换到这些说明。
注意: 这些步骤详细介绍了我今天遵循 openjfx.io 说明的结果。 将来所需的步骤可能会改变。
我下载了最新版本的 Eclipse(而不是 openjfx 说明中列出的旧 2020 版本)。
我还在 OS X (x64) 上使用了 OpenJFX 22.0.2。
创建新的gradle项目时(说明“1.创建Gradle项目”),在对话框中,我将java路径设置为已安装的OpenJFX 22.0.2 JDK,并且还手动将Gradle版本设置为8.10.2(因为 Gradle Wrapper 使用的默认版本是 8.1,它与最新的 Java 版本不兼容)。将下面对话框中的 JDK 路径替换为您的 JDK 安装路径。
创建的默认 gradle 项目不包含源代码或 build.xml,因此我按照“2.修改构建”和“3.添加模块信息类”的说明复制了它们。
对于“4.运行项目”的说明,还需要将 gradle 构建与 IDE 同步(按“Gradle 任务”图标中的“刷新所有项目的任务”按钮)。 刷新图标是指向左和右的箭头,是下图中 Gradle 任务窗口标题中倒数第二个黄色图标。 之后,所有必需的任务都会在“Gradle Tasks”窗口中显示为 gradle 任务。
HelloFX > build > build
,然后双击 HelloFX > application > run
后,应用程序运行并显示以下输出:如果您不使用 Eclipse 和 Gradle,为什么您认为这适用于当前版本?
其他遵循 openjfx.io 入门说明的人报告说它们过去可以工作。 迄今为止的说明尚未得到完美维护,因此您可能会遇到一些问题(例如我上面概述的问题)。 然而,这些说明维护得相当好且全面,因此它们构成了一个良好的起点。
此外,我最近尝试自己按照说明进行验证,如上所述。
如果你研究一下历史,你就会发现它已经有很多年了。
截至创建此答案时,Gradle 模块项目已于 2024 年 1 月 10 日(即八个半月前)刷新以支持现代 JavaFX 版本(21+)。 这可以在 github 上的项目历史记录中看到。
我的问题中的build.gradle被简化为对Eclipse有影响的部分
可能缩减太多了,不包含eclipse插件
'id eclipse'
。
根据openjfx.io的说明:“使用eclipse插件需要将模块包含到模块路径中。”
需要应用程序来构建 jar 文件和 jlink 来创建启动器。
对我来说,插件
id 'application'
的应用程序运行目标用于根据 openjfx 说明成功运行应用程序(而不是打包):“4. 运行项目 您可以打开 Gradle 任务窗口并单击构建 -> 构建构建项目,应用程序 -> 运行来运行项目。”