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

Quelqu'un a-t-il pu faire fonctionner javadoc sans avoir à changer la version source en 1.8 (comme suggéré dans d'autres forums)? J'utilise JDK v11.0.5 et le problème est toujours présent (également avec JDK 12+).

Edit: Cette erreur provient de maven et a été lancée par le plugin maven-javadoc. Je n'ai pas pu le faire fonctionner pour JDK 11+ même avec la <source>8</source>configuration.

Rafael Ibasco
la source
Je pense que cette question a besoin de plus de détails. Utilisez-vous maven? Utilisez-vous ou avez-vous essayé d'utiliser des modules dans votre projet?
rü-
@ rü- vous avez raison, j'ai mis à jour le message, merci. Oui, j'utilise maven avec une configuration multi-modules.
Rafael Ibasco

Réponses:

7

Comme suggéré dans le traqueur de problèmes OpenJDK, cela peut être contourné avec la définition de la source sur le plugin Javadoc:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <source>8</source>
    </configuration>
</plugin>
Roman Grigoriadi
la source
3
Vous n'avez probablement pas lu la question complètement. OP a clairement mentionné:Has anyone been able to make javadoc work without having to change the source version to 1.8
Arvind Kumar Avinash
1
ça marche pour moi. J'utilise: <configuration> <source> $ {java.version} </source> </configuration> et dans les propriétés c'est java 11. Je devais juste spécifier la version pour une raison quelconque.
ranma2913
Comment pouvez-vous faire cela à Gradle?
Raffi Khatchadourian
1

javadoc produit des liens vers les packages que vous utilisez, par exemple vers les classes documentées dans .../javase/11/docs/api. Alors que vos commentaires sont dans un module sans nom, les cibles ne le sont pas et javadoc ne peut pas combiner ces deux. Il produit un package-listou un element-listfichier, vous ne pouvez donc pas mélanger des modules (packages) sans nom avec des modules nommés.

Je n'ai pas trouvé de moyen de limiter les liens que javadoc essaie de produire; vous devrez donc peut-être utiliser des modules pour votre propre projet. Cela me semble ridicule, juste pour rendre javadoc heureux. Je suppose que ce n'est qu'une des raisons pour lesquelles tant de gens s'en tiennent à Java 8.

rü-
la source
0

Il y avait une importante rupture de changement depuis Java 9 pour l' utilisation de l' API Doclet

JEP 221: API Doclet simplifiée
Remplace l'ancienne API Doclet par une nouvelle API simplifiée qui exploite d'autres API standard existantes. Le doclet standard a été réécrit pour utiliser la nouvelle API Doclet

L'API existante et l'ancien doclet standard sont disponibles, mais n'ont pas été mis à jour pour prendre en charge de nouvelles fonctionnalités de langage, telles que les modules

L'ancienne API utilise le package com.sun.javadoc

L'API Doclet (également appelée API Javadoc) fournit un mécanisme permettant aux clients d'inspecter la structure au niveau source des programmes et des bibliothèques, y compris les commentaires javadoc intégrés dans la source.

Vous pouvez essayer d'utiliser la nouvelle API Doclet, voir des exemples

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
la source
4
Je peux me tromper, mais je ne pouvais pas vraiment comprendre la partie solution ici. Étant donné la question déjà lue .. Quelqu'un a
Naman
"L'API existante et l'ancien doclet standard sont disponibles, mais n'ont pas été mis à jour pour prendre en charge de nouvelles fonctionnalités de langage, telles que les modules". Cela signifie-t-il donc que javadoc est rompu pour les versions 9 et supérieures? De plus, mon problème est que maven signale cette erreur à partir de maven-javadoc-plugin. Je ne sais pas comment le code que vous avez publié ci-dessus pourrait vous aider.
Rafael Ibasco
1
Je ne pense pas que @RafaelIbasco écrivait des doclets. Cette réponse ne semble pas utile.
rü-