Mr.*_*ong 5 java java-platform-module-system java-9
当我在 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)
Run Code Online (Sandbox Code Playgroud)
有人能告诉我这是怎么回事吗?据我了解,任何不在 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);
}
Run Code Online (Sandbox Code Playgroud)
那么,如果 com.fasterxml.jackson.annotation 包就是这种情况,为什么错误引用了具有该名称的模块,以及为什么它不读取它会出现问题?
引用JigSaw 规范:
未命名的模块导出其所有包。这可以实现灵活的迁移,我们将在下面看到。但是,这并不意味着命名模块中的代码可以访问未命名模块中的类型。事实上,命名模块甚至不能声明对未命名模块的依赖。
您正在寻找的是自动模块。在自动模块中, ajar可以放置在模块路径中,并且会自动从其自身派生出模块名称jar。如果您使用 Maven,那应该是artifactId.
因此,如果您jackson-annotations在 Maven 中使用如下:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.0.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
您仍然需要在您的内部定义它module-info.java:
module example {
requires jackson.annotations;
}
Run Code Online (Sandbox Code Playgroud)
之后,您可以在模块中自由使用注释。
| 归档时间: |
|
| 查看次数: |
7603 次 |
| 最近记录: |