如何在IntelliJ JavaFX中修复“包已在模块中声明,但模块未读取它”错误?

11

我使用IntelliJ和Maven创建了一个JavaFX项目。我正在尝试测试一个系统,它将项目添加到XML文件中,然后解析文件并显示所有添加到文件中的项目。

我想使用FasterXML/Jackson来解析这些文件。在我的pom.xml中,我添加了以下依赖项:

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.13.2</version>
</dependency>

(...) 我还从IntellJ提供的按钮加载了Maven更改。 我还按下了 Reload all Maven Changes 按钮。 "Dependencies" 文件夹似乎都没问题。 我没有收到任何错误或投诉: enter image description here

然而,当我尝试导入一些与Jackson相关的类,例如ObjectMapper,像这样:

import com.fasterxml.jackson.databind.ObjectMapper;

(...) 我收到了这样的错误:

Package 'com.fasterxml.jackson.databind' is declared in module 'com.fasterxml.jackson.databind', but module 'com.example.demo1' does not read it.

这是我的项目结构:

enter image description here

可能是什么问题呢?

2个回答

8

我已经解决了我的问题。在我的module-info.java文件中,我需要添加以下代码行:

requires com.fasterxml.jackson.databind;

在 Stack 上回答一个问题时发现了类似的情况(如何解决“包已在模块中声明,但模块未读取它”的问题),尽管回答的用户说你还需要打开该模块。 然而打开该模块会导致其他错误,但是仅提到它作为要求应该就足够了。

我在javax.ws.rs方面遇到了同样的问题,但是你的解决方案对我不起作用。 - Guto
2
我有同样的问题,但我无法将我的依赖项添加到我的module-info中,因为它本身没有模块化。 - dudeNumber4

0
我在IntelliJ中遇到了这个问题。
对于仍然遇到此问题的任何人,我发现问题是由于没有在module-info.java中将控制器导出到java.fx和java.base导致的。
假设您正在使用MVC,并且有一个包含所有控制器类的控制器包。
以下是解决方法:
exports controller;
opens controller to javafx.fxml;

还要确保您在同一文件(module-info.java)的模型包中添加以下内容:
opens model to javafx.base;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接