包 com.fasterxml.jackson.annotation 不可见

package com.fasterxml.jackson.annotation is not visible

当我在 Java 9 中编译我的 Spring 引导应用程序时,它在出现如下几条消息后失败:

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 Spec

The unnamed module exports all of its packages. This enables flexible migration, as we shall see below. It does not, however, mean that code in a named module can access types in the unnamed module. A named module cannot, in fact, even declare a dependence upon the unnamed module.

您要找的是 Automatic Modules。在自动模块中,可以将 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;
}

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