package com.fasterxml.jackson.annotation is not visible



当我在Java 9中编译我的Spring Boot应用程序时,它失败了,并显示以下几条消息:

package com.fasterxml.jackson.annotation is not visible
(package com.fasterxml.jackson.annotation is declared in the unnamed module, but module com.fasterxml.jackson.annotation does not read it)

有人可以告诉我这里发生了什么吗?据我了解,任何不在 Java-9 模块中的 Java 9 之前的代码都将是未命名模块的一部分,其中任何内容都会暴露。

我在我的模块中将其用作这样的注释:

@JsonIgnore
public Week getNextWeek()
{
Calendar instance = this.getFirstDay();
instance.set(Calendar.WEEK_OF_YEAR, this.week + 1);
return new Week(instance);
}

因此,如果 com.fasterxml.jackson.annotation 包是这种情况,为什么错误引用具有该名称的模块,为什么它不读取它是一个问题?

引用JigSaw规范:

未命名的模块导出其所有包。这样可以实现灵活的迁移,我们将在下面看到。但是,这并不意味着命名模块中的代码可以访问未命名模块中的类型。事实上,命名模块甚至不能声明对未命名模块的依赖关系。

您正在寻找的是自动模块。在自动模块中,可以将jar放置在模块路径上,并将自动从jar本身派生模块名称。如果您使用的是Maven,那应该是artifactId

因此,如果您在 maven 中使用jackson-annotations,如下所示:

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.0.0</version>
</dependency>

您仍然需要在module-info.java中定义它:

module example {
requires jackson.annotations;
}

之后,您可以自由使用模块中的注释。

相关内容

最新更新