当我在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包的情况,为什么错误引用具有该名称的模块,为什么它不能读取它?
答案 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;
}
之后,您可以自由使用模块中的注释。