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

Qualcuno è stato in grado di far funzionare javadoc senza dover cambiare la versione di origine in 1.8 (come suggerito in altri forum)? Sto usando JDK v11.0.5 e il problema è ancora presente (anche con JDK 12+).

Modifica: questo errore è originato da Maven e generato dal plugin Maven-Javadoc. Non sono stato in grado di farlo funzionare per JDK 11+ anche con la <source>8</source>configurazione.



Penso che questa domanda abbia bisogno di ulteriori dettagli. Usi Maven? Usi o hai provato a usare i moduli nel tuo progetto?
rü-

@ rü- hai ragione, ho aggiornato il post, grazie. Sì, sto usando Maven con una configurazione multi-modulo.
Rafael Ibasco,

Risposte:


7

Come suggerito nel tracker di problemi OpenJDK, questo può essere risolto con la definizione del sorgente sul plugin Javadoc:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <source>8</source>
    </configuration>
</plugin>

3
Probabilmente non hai letto completamente la domanda. OP ha chiaramente menzionato:Has anyone been able to make javadoc work without having to change the source version to 1.8
Arvind Kumar Avinash il

1
per me funziona. Uso: <configuration> <source> $ {java.version} </source> </configuration> e nelle proprietà è java 11. Ho dovuto solo specificare la versione per qualche motivo.
ranma2913

Come puoi farlo in Gradle?
Raffi Khatchadourian il

1

javadoc produce collegamenti ai pacchetti che usi, ad esempio alle classi documentate .../javase/11/docs/api. Mentre i tuoi commenti sono in un modulo senza nome, gli obiettivi non lo sono e javadoc non può combinare quei due. Produce un package-listo un element-listfile, quindi non è possibile combinare moduli (pacchetti) senza nome con moduli con nome.

Non ho trovato un modo per limitare i collegamenti che javadoc tenta di produrre; quindi potresti dover usare i moduli per il tuo progetto. Mi sembra ridicolo, solo per rendere felice Javadoc. Immagino che questo sia solo uno dei motivi per cui così tante persone si attengono a Java 8.


0

C'è stata una significativa rottura cambiamento dal momento che Java 9 per l'utilizzo di API Doclet

JEP 221: API Doclet semplificata
Sostituisce la vecchia API Doclet con una nuova API semplificata che sfrutta altre API standard esistenti. Il doclet standard è stato riscritto per utilizzare la nuova API Doclet

L'API esistente e il vecchio doclet standard sono disponibili, ma non sono stati aggiornati per supportare nuove funzionalità linguistiche, come i moduli

La vecchia API utilizza il pacchetto com.sun.javadoc

L'API Doclet (chiamata anche API Javadoc) fornisce ai clienti un meccanismo per ispezionare la struttura a livello di sorgente di programmi e librerie, inclusi i commenti javadoc incorporati nell'origine.

Puoi provare a utilizzare la nuova API Doclet, vedi esempi

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
Potrei sbagliarmi, ma non riuscivo davvero a capire la parte della soluzione qui. Data la domanda già letta .. Qualcuno è stato in grado di far funzionare javadoc senza dover cambiare la versione di origine in 1.8 ..
Naman,

"L'API esistente e il vecchio doclet standard sono disponibili, ma non sono stati aggiornati per supportare nuove funzionalità linguistiche, come i moduli" Quindi questo significa che javadoc è rotto per le versioni 9 e successive? Inoltre, il mio problema è con maven che segnala questo errore da maven-javadoc-plugin. Non sono sicuro di come il codice che hai postato sopra sarebbe di aiuto.
Rafael Ibasco,

1
Non credo che @RafaelIbasco stesse scrivendo doclet. Questa risposta non sembra utile.
rü-
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.