Пакет com.fasterxml.jackson.annotation не отображается
Когда я компилирую свое приложение Spring Boot в Java 9, оно перестает работать после пары сообщений, таких как это:
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 ответ
Цитирование из JigSaw Spec:
Безымянный модуль экспортирует все свои пакеты. Это обеспечивает гибкую миграцию, как мы увидим ниже. Это, однако, не означает, что код в названном модуле может обращаться к типам в неназванном модуле. Именованный модуль не может даже объявить зависимость от неназванного модуля.
То, что вы ищете, это автоматические модули. В автоматических модулях jar
может быть помещен в путь к модулю и автоматически получит имя модуля из jar
сам. Если вы используете Maven, это должно быть artifactId
,
Таким образом, если вы используете jackson-annotations
в Maven следующим образом:
<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;
}
После этого вы можете свободно использовать аннотации в вашем модуле.