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>конфігурацією.



Я думаю, що це питання потребує ще деяких деталей. Ви використовуєте maven? Чи використовуєте ви чи намагалися використовувати модулі у своєму проекті?
rü-

@ rü - ти маєш рацію, я оновив пост, дякую. Так, я використовую 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.


0

Існував значний розрив змін з Java 9 для використання Doclet API

JEP 221: Спрощений API Doclet
Замінює старий API Doclet на новий спрощений API, який використовує інші стандартні існуючі API. Стандартний doclet був переписаний для використання нового API Doclet

Існуючий API та старий стандартний доклет доступні, але не були оновлені для підтримки нових мовних функцій, таких як модулі

Старий API використовує пакет com.sun.javadoc

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

Ви можете спробувати скористатися новим API Doclet, переглянути приклади

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();
}

4
Я можу помилятися, але я не зміг зрозуміти частину рішення тут. З огляду на вже прочитане запитання. Чи хтось зміг змусити javadoc працювати без зміни вихідної версії на 1,8 ..
Наман

"Існуючий API та старий стандартний доклет доступні, але вони не були оновлені для підтримки нових мовних функцій, таких як модулі". Чи означає це, що javadoc зламаний для версій 9 і вище? Крім того, моя проблема полягає в тому, щоб Maven повідомив про цю помилку з Maven-javadoc-plugin. Я не впевнений, як допоможе код, який ви опублікували вище.
Рафаель Ібаско

1
Я не думаю, що @RafaelIbasco писав ляльки. Ця відповідь здається не корисною.
rü-
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.