JDK 11+ и Javadoc

13
Exit code: 1 - javadoc: error - The code being documented uses packages in the unnamed module, but the packages defined in https://docs.oracle.com/en/java/javase/11/docs/api/ are in named modules.

Кто-нибудь смог заставить работать javadoc без необходимости менять исходную версию на 1.8 (как предлагалось на других форумах)? Я использую JDK v11.0.5, и проблема все еще присутствует (также с JDK 12+).

Редактировать: эта ошибка возникла из-за maven и выбрасывается плагином maven-javadoc. Я не смог заставить его работать на JDK 11+ даже с <source>8</source>конфигурацией.

Рафаэль Ибаско
источник
Похожие bugs.openjdk.java.net/browse/JDK-8212233
user7294900
Я думаю, что этот вопрос нуждается в некоторых деталях. Вы используете Maven? Вы используете или пытались использовать модули в своем проекте?
Ru-
@ ru- ты прав, я обновил пост, спасибо. Да, я использую maven с мульти-модульной установкой.
Рафаэль Ибаско

Ответы:

7

Как предложено в трекере проблем OpenJDK, это можно обойти с помощью определения источника в плагине Javadoc:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <source>8</source>
    </configuration>
</plugin>
Роман Григориади
источник
3
Возможно, вы не прочитали вопрос полностью. ОП четко упомянул:Has anyone been able to make javadoc work without having to change the source version to 1.8
Арвинд Кумар Авинаш
1
меня устраивает. Я использую: <configuration> <source> $ {java.version} </ source> </ configuration> и в свойствах это java 11. Мне просто нужно было указать версию по какой-то причине.
ranma2913
Как вы можете сделать это в Gradle?
Раффи Хачадурян
1

javadoc создает ссылки на используемые вами пакеты, например, на классы, описанные в .../javase/11/docs/api. Пока ваши комментарии находятся в неназванном модуле, цели - нет, и javadoc не может объединить эти два. Он создает либо файл, package-listлибо element-listфайл, поэтому вы не можете смешивать безымянные модули (пакеты) с именованными модулями.

Я не нашел способа ограничить ссылки, которые пытается создать Javadoc; поэтому вам, возможно, придется использовать модули для вашего собственного проекта. Это кажется мне смешным, просто чтобы сделать Javadoc счастливым. Я полагаю, что это только одна из причин, по которой многие люди придерживаются Java 8.

RU-
источник
0

Существовал значительный разрыв изменений с Java 9 для использования Doclet API

JEP 221: Упрощенный API Doclet
Заменяет старый API Doclet новым упрощенным API, который использует другие стандартные существующие API. Стандартный доклет был переписан для использования нового API Doclet

Существующий API и старый стандартный доклет доступны, но не были обновлены для поддержки новых языковых функций, таких как модули

Старый API использует пакет com.sun.javadoc

Doclet API (также называемый Javadoc API) предоставляет клиентам механизм для проверки структуры программ и библиотек на уровне источника, включая комментарии javadoc, встроенные в источник.

Вы можете попробовать использовать новый Doclet API, см. Примеры

public class BasicDoclet implements Doclet {
@Override
public void init(Locale locale, Reporter reporter) {  }
@Override
public String getName() {
    // For this doclet, the name of the doclet is just the
    // simple name of the class. The name may be used in
    // messages related to this doclet, such as in command-line
    // help when doclet-specific options are provided.
    return getClass().getSimpleName();
}
user7294900
источник
4
Возможно, я ошибаюсь, но я не мог понять здесь часть решения. Учитывая уже прочитанный вопрос .. Кто-нибудь смог заставить работать javadoc без необходимости менять исходную версию на 1.8 ..
Наман
«Существующий API и старый стандартный доклет доступны, но не были обновлены для поддержки новых языковых функций, таких как модули». Значит ли это, что javadoc не работает для версий 9 и выше? Также моя проблема связана с тем, что maven сообщает об этой ошибке из maven-javadoc-plugin. Я не уверен, как код, который вы разместили выше, поможет.
Рафаэль Ибаско
1
Я не думаю, что @RafaelIbasco писал доклеты. Этот ответ кажется бесполезным.
Ru-