我将IntelliJ IDEA中的带有Gradle的OpenJDK 11和OpenJFX 11.0.1用于我的项目。 当我使用javafx.base模块时,IntelliJ IDEA在第1行(项目模块声明)报告了一个错误,指出我的模块需求中未包含javafx.beans模块(beans是javafx.base模块中的软件包)。 Gradle jar任务执行时没有任何错误或警告,因此此错误很可能与IntelliJ IDEA有关。
错误消息:“模块'hr.caellian.lunar'读取了'javafx.base'和'javafx.base'的包'javafx.beans'” 如果我删除了“ javafx.base”要求,则上述错误中的“ javafx.base”将被下一个javafx模块替换。
我也在javafx模块要求行上得到警告:“ javafx.base”的“歧义模块参考: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不再包含OpenJFX。
我将OpenJFX SDK安装到JDK文件夹中(将lib文件复制到lib文件夹,合法),并在IDEA中手动从JDK11的lib文件夹添加了javafx jar依赖文件。我还将所有jmod文件添加到JDK11的jmod文件夹中。
JavaFX模块是否有错误的module-info.java文件或类似的文件?这是IntelliJ IDEA错误吗?
答案 0 :(得分:0)
通过@nullpointer的评论,得以解决该问题。
问题是我已将文件从JavaFX SDK复制到我的JDK 11类路径和项目lib文件夹中。
如果您看到的错误带有相同的警告,则意味着您可能在IntelliJ项目JDK Classpath和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。它们本来应该分开的。