JDK 11+ i 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.

Czy ktoś był w stanie sprawić, że javadoc działa bez konieczności zmiany wersji źródłowej na 1.8 (jak sugerowano na innych forach)? Używam JDK 11.0.5 i problem nadal występuje (również z JDK 12+).

Edycja: Ten błąd pochodzi z maven i jest zgłaszany przez wtyczkę maven-javadoc. Nie byłem w stanie sprawić, aby działał dla JDK 11+, nawet przy <source>8</source>konfiguracji.

Rafael Ibasco
źródło
Myślę, że to pytanie wymaga więcej szczegółów. Czy używasz maven? Czy używasz lub próbowałeś użyć modułów w swoim projekcie?
rü-
@ rü- masz rację, zaktualizowałem post, dzięki. Tak, używam maven z konfiguracją wielomodułową.
Rafael Ibasco

Odpowiedzi:

7

Tak jak zasugerowano w narzędziu do śledzenia problemów OpenJDK, można to obejść, definiując źródło wtyczki Javadoc:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <source>8</source>
    </configuration>
</plugin>
Roman Grigoriadi
źródło
3
Prawdopodobnie nie przeczytałeś pytania całkowicie. OP wyraźnie wspomniał:Has anyone been able to make javadoc work without having to change the source version to 1.8
Arvind Kumar Avinash
1
mi to pasuje. Używam: <configuration> <source> $ {java.version} </source> </configuration>, a we właściwościach jest java 11. Po prostu musiałem podać wersję z jakiegoś powodu.
ranma2913
Jak możesz to zrobić w Gradle?
Raffi Khatchadourian
1

javadoc tworzy linki do pakietów, których używasz, np. do klas udokumentowanych w .../javase/11/docs/api. Podczas gdy twoje komentarze znajdują się w nienazwanym module, cele nie są, a javadoc nie może połączyć tych dwóch. Tworzy albo plik, package-listalbo element-listplik, więc nie można mieszać nienazwanych modułów (pakietów) z nazwanymi modułami.

Nie znalazłem sposobu na ograniczenie linków, które javadoc próbuje stworzyć; więc być może będziesz musiał użyć modułów do własnego projektu. To wydaje mi się absurdalne, po prostu, aby uszczęśliwić javadoc. Sądzę, że jest to tylko jeden z powodów, dla których tak wiele osób trzyma się Java 8.

rü-
źródło
0

Nastąpiła znacząca przełomowa zmiana od Java 9 dla używania Doclet API

JEP 221: Uproszczony interfejs API Docleta
Zastępuje stary interfejs API Docletu nowym, uproszczonym interfejsem API, który wykorzystuje inne standardowe istniejące interfejsy API.Standardowy dokument został przepisany, aby korzystać z nowego interfejsu API Doclet

Istniejący interfejs API i stary standardowy dokument są dostępne, ale nie zostały zaktualizowane w celu obsługi nowych funkcji języka, takich jak moduły

Stare API używa com.sun.javadoc pakietu

Doclet API (zwany także Javadoc API) zapewnia klientom mechanizm do sprawdzania struktury programów i bibliotek na poziomie źródła, w tym komentarze javadoc osadzone w źródle.

Możesz spróbować użyć nowego interfejsu Doclet API, zobacz przykłady

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();
}
użytkownik7294900
źródło
4
Mogę się mylić, ale tak naprawdę nie mogłem tutaj znaleźć rozwiązania. Biorąc pod uwagę pytanie, które już przeczytałem .. Czy ktokolwiek był w stanie sprawić, że javadoc działał bez konieczności zmiany wersji źródłowej na 1.8 ..
Naman
„Istniejące API i stary standardowy dokument są dostępne, ale nie zostały zaktualizowane w celu obsługi nowych funkcji językowych, takich jak moduły”. Czy to oznacza, że ​​javadoc jest zepsuty dla wersji 9 i nowszych? Ponadto mój problem polega na tym, że maven zgłasza ten błąd z wtyczki maven-javadoc. Nie jestem pewien, w jaki sposób kod opublikowany powyżej pomógłby.
Rafael Ibasco
1
Nie sądzę, że @RafaelIbasco pisał doktryny. Ta odpowiedź nie wydaje się pomocna.
rü-