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

Hat jemand Javadoc zum Laufen gebracht, ohne die Quellversion auf 1.8 ändern zu müssen (wie in anderen Foren vorgeschlagen)? Ich verwende JDK v11.0.5 und das Problem ist immer noch vorhanden (auch mit JDK 12+).

Bearbeiten: Dieser Fehler stammt von maven und wird vom maven-javadoc-plugin ausgelöst. Ich konnte es trotz der <source>8</source>Konfiguration nicht für JDK 11+ zum Laufen bringen .

Rafael Ibasco
quelle
Ich denke, diese Frage braucht einige Details. Benutzt du Maven? Verwenden Sie Module oder haben Sie versucht, sie in Ihrem Projekt zu verwenden?
rü-
@ rü- du hast recht, ich habe den Beitrag aktualisiert, danke. Ja, ich verwende Maven mit einem Multi-Modul-Setup.
Rafael Ibasco

Antworten:

7

Wie im OpenJDK Issue Tracker vorgeschlagen, kann dies umgangen werden, indem die Quelle im Javadoc-Plugin definiert wird:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <source>8</source>
    </configuration>
</plugin>
Roman Grigoriadi
quelle
3
Wahrscheinlich haben Sie die Frage nicht vollständig gelesen. OP hat klar erwähnt:Has anyone been able to make javadoc work without having to change the source version to 1.8
Arvind Kumar Avinash
1
Für mich geht das. Ich benutze: <configuration> <source> $ {java.version} </ source> </ configuration> und in den Eigenschaften ist es Java 11. Ich musste aus irgendeinem Grund nur die Version angeben.
ranma2913
Wie können Sie dies in Gradle tun?
Raffi Khatchadourian
1

javadoc erstellt Links zu Paketen, die Sie verwenden, z. B. zu Klassen, die in dokumentiert sind .../javase/11/docs/api. Während sich Ihre Kommentare in einem unbenannten Modul befinden, sind dies die Ziele nicht, und Javadoc kann diese beiden nicht kombinieren. Es wird entweder eine package-listoder eine element-listDatei erstellt, sodass Sie unbenannte Module (Pakete) nicht mit benannten Modulen mischen können.

Ich habe keine Möglichkeit gefunden, die von javadoc zu produzierenden Links einzuschränken. Daher müssen Sie möglicherweise Module für Ihr eigenes Projekt verwenden. Das scheint mir lächerlich, nur um Javadoc glücklich zu machen. Ich denke, dies ist nur einer der Gründe, warum so viele Leute an Java 8 festhalten.

rü-
quelle
0

Es gab eine signifikante Bruch Veränderung seit Java 9 für die Verwendung von Doclet API

JEP 221: Vereinfachte Doclet-API
Ersetzt die alte Doclet-API durch eine neue vereinfachte API, die andere vorhandene Standard-APIs nutzt. Das Standard-Doclet wurde neu geschrieben, um die neue Doclet-API zu verwenden

Die vorhandene API und das alte Standard-Doclet sind verfügbar, wurden jedoch nicht aktualisiert, um neue Sprachfunktionen wie Module zu unterstützen

Die alte API verwendet das Paket com.sun.javadoc

Die Doclet-API (auch als Javadoc-API bezeichnet) bietet Clients einen Mechanismus zum Überprüfen der Struktur von Programmen und Bibliotheken auf Quellenebene, einschließlich der in die Quelle eingebetteten Javadoc-Kommentare.

Sie können versuchen, die neue Doclet-API zu verwenden (siehe Beispiele)

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
quelle
4
Ich könnte mich irren, aber ich konnte den Lösungsteil hier nicht wirklich herausfinden. Angesichts der Frage bereits gelesen .. Hat jemand in der Lage gewesen, Javadoc zum Laufen zu bringen, ohne die Quellversion auf 1.8 ändern zu müssen ..
Naman
"Die vorhandene API und das alte Standard-Doclet sind verfügbar, wurden jedoch nicht aktualisiert, um neue Sprachfunktionen wie Module zu unterstützen." Bedeutet dies, dass Javadoc für Versionen 9 und höher fehlerhaft ist? Mein Problem ist auch, dass Maven diesen Fehler vom Maven-Javadoc-Plugin meldet. Ich bin mir nicht sicher, wie der Code, den Sie oben gepostet haben, helfen würde.
Rafael Ibasco
1
Ich glaube nicht, dass @RafaelIbasco Dokumente schrieb. Diese Antwort scheint nicht hilfreich zu sein.