包com.fasterxml.jackson.annotation不可见

时间:2018-06-18 14:42:20

标签: java java-9 jigsaw

当我在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包的情况,为什么错误引用具有该名称的模块,为什么它不能读取它?

1 个答案:

答案 0 :(得分:3)

引用JigSaw Spec

  

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

您正在寻找的是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;
}

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