0

我在 IntelliJ IDEA 中将 OpenJDK 11 和 OpenJFX 11.0.1 与 Gradle 一起用于我的项目。当我使用 javafx.base 模块时,IntelliJ IDEA 在第 1 行(项目模块声明)报告错误,说我的模块要求中没有包含 javafx.beans 模块(bean 是 javafx.base 模块中的一个包)。Gradle jar 任务执行时没有任何错误或警告,因此此错误可能与 IntelliJ IDEA 有关。

错误消息:“模块 'hr.caellian.lunar' 读取 'javafx.base' 和 'javafx.base' 的包 'javafx.beans'”如果我从上面删除 'javafx.base' 要求,'javafx.base'错误被下一个 javafx 模块替换。

我还在 javafx 模块要求行收到警告:“不明确的模块参考:javafx.base” for 'javafx.base' 等等每个 javafx 模块。

这是我的 module-info.java 文件:

module hr.caellian.lunar {
    requires java.base;
    requires kotlin.stdlib;

    requires javafx.base;
    requires javafx.controls;
    requires javafx.fxml;
    opens hr.caellian.lunar.gui to javafx.graphics;

    requires org.kordamp.ikonli.javafx;
    requires org.kordamp.iconli.core;

    requires com.fasterxml.jackson.core;
    requires com.fasterxml.jackson.databind;
    requires com.fasterxml.jackson.dataformat.yaml;

    requires arglib;
    requires org.apache.bcel;
}

我在网上找了至少半个小时的解决方案。我发现的只是一个网站,上面说只有我已经包含的模块是 JFX 所必需的(我认为这是 JavaFX 9)。

我重新下载了 JavaFX 模块以查看我是否错过了复制某些内容,但我没有 - javafx.beans 模块不存在。

如果这是一个问题,'java --list-modules' 不会列出任何 javafx 模块,尽管我认为它应该只列出 jdk 模块并且 OpenJFX 不再包含在 OpenJDK 中。

我将 OpenJFX SDK 安装到 JDK 文件夹中(lib 文件复制到 lib 文件夹,合法相同),从 IDEA 中的 JDK11 的 lib 文件夹中手动添加 javafx jar 依赖文件。我还将所有 jmod 文件添加到 JDK11 的 jmod 文件夹中。

JavaFX 模块是否可能有错误的 module-info.java 文件或类似的文件?这是 IntelliJ IDEA 错误吗?

4

1 回答 1

4

感谢@nullpointer 的评论,设法解决了这个问题。

问题是我已将文件从 JavaFX SDK 复制到我的 JDK 11 类路径和项目 lib 文件夹。

如果您看到此错误并带有相同的警告,这意味着您的 IntelliJ 项目 JDK 类路径和 build.gradle(或 lib 文件夹)中可能有重复的模块 jar(可能直接在未来的模块中)。

如何修复: 我从项目结构中 IntelliJ IDEA 的 JDK11 类路径中删除了 OpenJFX SDK jar。当我从我的项目 lib 文件夹中删除 JFX SDK jar 时,我阅读了它们。Gradle 将 lib 文件夹中的每个 jar 添加到:

implementation fileTree(dir: 'lib', include: '**/*.jar')

另外,不要将 JavaFX 直接安装到 JDK 文件夹中。如果不保留不必要的文件,就不可能进行更新,如果您想删除它,您将永远无法找到要删除的所有 JFX 文件,JFX src.zip 替换了 lib 文件夹中的 JDK src.zip。他们是分开的。

于 2018-11-10T09:18:28.557 回答