Java - 当应用程序是 运行 时,IntelliJ 找不到模块-info.java 中声明的模块库

Java - IntelliJ not finding module-libraries stated in module-info.java when the application is ran

我的设置:

我遵循了 JavaFX 和 IntelliJ -> Modular 来自 IDE path 的步骤。

我添加了 ikonli-core-12.2.0.jar, ikonli-javafx-12.2.0.jarikonli-carbonicons-pack-12.2.0.jar 按此顺序通过存储库到 Scene Builder。在这里,它们工作正常。

然后我按照此处描述的相同顺序将相同的 .jars 添加到 IntelliJ:Correct way to add external jars (lib/*.jar) to an IntelliJ IDEA project.

我的 module-info.java 文件包含以下代码:

module project {

    requires javafx.controls;
    requires javafx.fxml;

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

    opens com.project to javafx.fxml;

    exports com.project;
}

我的图书馆图片:

问题:

当我将图标添加到 .fxml 文件并单击 运行 时,出现以下错误:

Error occurred during initialization of boot layer
java.lang.module.FindException: Module org.kordamp.ikonli.javafx not found, required by project

模块名称不同。有时它说是 javafx,其他人说是 corecarbonicons.

我不确定为什么会这样。当我输入 module-info.java 文件时,我得到了自动填充提示,但是当我尝试 import org.kordamp.ikonli.core; 在我的 Main.java, 它不会 检测到它们。

我不确定为什么会这样。当我在 module-info.java 文件中输入或在我的 Main.java 中尝试 import org.kordamp.ikonli.javafx.FontIcon; 时,我得到了自动填充提示,所以这意味着它是检测到它们。

如果我从 module-info.java 和 运行 中删除“ikonli requires”,我会得到这个错误(这是可以理解的):

java.lang.ClassNotFoundException: org.kordamp.ikonli.javafx.FontIcon

我尝试过的解决方案:

  1. 通过文件添加.jars -> 项目设置 -> .

这似乎自动将它们添加到 Modules -> Dependencies,但即便如此,问题仍然存在。

  1. 将它们添加到 VM 选项运行 -> 编辑配置 -> Modify Options -> VM Options) 以各种方式,在上面链接的步骤中提到的 --module-path ${PATH_TO_FX}:out/production 之后 (out 可以安全地更改为 mods 但我选择不这样做)。

第一个:

--module-path ${PATH_TO_IKONLI_CORE}--module-path ${PATH_TO_IKONLI_JAVAFX}--module-path ${PATH_TO_IKONLI_CARBONICONS}

这样做可以避免检测到我实际的 project 模块。 IE。我收到此错误:

Error occurred during initialization of boot layer
java.lang.module.FindException: Module project not found

第二个:

--add-modules ${PATH_TO_IKONLI_CORE},${PATH_TO_IKONLI_JAVAFX},${PATH_TO_IKONLI_CARBONICONS}

这个会产生一个微笑错误:

Error occurred during initialization of boot layer
java.lang.module.FindException: Module /directory/path/to/file/ikonli-core-12.2.0.jar not found

第三个:

--add-modules org.kordamp.ikonli.core,org.kordamp.ikonli.javafx,org.kordamp.ikonli.carbonicons

出现类似的错误:

Error occurred during initialization of boot layer
java.lang.module.FindException: Module org.kordamp.ikonli.core not found
  1. 我尝试了文件 -> 从磁盘重新加载所有使缓存无效/重新启动 选项,但它们似乎没有效果。

  2. 我在我的 src 项目文件夹中创建了一个 lib 文件夹,将 .jars 放在那里并将它们添加为依赖项。现在它们没有出现在 External Libraries 部分(因为它们显然不是外部的)但问题仍然存在(我将再次将它们重新添加为外部)。

附加信息:

我添加 controlsfx.jar 的方式与 Ikonli .jars 相同。也出现同样的错误。

他们都有 module-info.class 文件在正确的目录中,如 official javadoc 中所述,但 ModuleFinder 仍然抛出异常。

我还检查了我的 project.iml 文件,它们都有 module-libraries 和正确的目录。

我已经多次访问 official Ikonli installation steps 并且一切正常。

不过,其中提到我需要在模块描述符中包含 requires javafx.base; requires javafx.graphics;。不正确,至少在我的情况下,因为当我将 --show-module-resolution 添加到 VM 选项 时,它表明它们加载正常,但即使我确实添加了它们,错误仍然出现。

结束

很抱歉 post,我没有想法,我不知道还能尝试什么。

其中一条评论 提到他们将 .jar 放在 mods/production 文件夹中。我做了同样的事情......并且它有效。 (╯°□°)╯︵┻━┻

我猜“来自 IDE 的模块化”与 IDE 不一致。

看起来 正确的 模块化方法是使用 Maven/Gradle。我将重建并使用 Gradle.