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

¿Alguien ha podido hacer que javadoc funcione sin tener que cambiar la versión de origen a 1.8 (como se sugiere en otros foros)? Estoy usando JDK v11.0.5 y el problema aún está presente (también con JDK 12+).

Editar: este error se originó en maven y fue lanzado por el complemento maven-javadoc. No he podido hacerlo funcionar para JDK 11+ incluso con la <source>8</source>configuración.

Rafael Ibasco
fuente
Errores
user7294900
Creo que esta pregunta necesita más detalles. ¿Utilizas maven? ¿Utiliza o ha intentado utilizar módulos en su proyecto?
rü-
@ rü- tienes razón, he actualizado la publicación, gracias. Sí, estoy usando maven con una configuración de varios módulos.
Rafael Ibasco

Respuestas:

7

Como se sugiere en el rastreador de problemas de OpenJDK, esto se puede solucionar con la definición de la fuente en el complemento Javadoc:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <source>8</source>
    </configuration>
</plugin>
Roman Grigoriadi
fuente
3
Probablemente, no leíste la pregunta por completo. OP ha mencionado claramente:Has anyone been able to make javadoc work without having to change the source version to 1.8
Arvind Kumar Avinash
1
esto funciona para mi. Uso: <configuration> <source> $ {java.version} </source> </configuration> y en las propiedades es java 11. Solo tuve que especificar la versión por alguna razón.
ranma2913
¿Cómo puedes hacer esto en Gradle?
Raffi Khatchadourian
1

javadoc produce enlaces a paquetes que usa, por ejemplo, a clases documentadas en .../javase/11/docs/api. Mientras sus comentarios están en un módulo sin nombre, los objetivos no lo están, y javadoc no puede combinar esos dos. Produce package-listun element-listarchivo o un archivo, por lo que no puede mezclar módulos (paquetes) sin nombre con módulos con nombre.

No encontré una manera de limitar los enlaces que javadoc intenta producir; por lo que puede que tenga que usar módulos para su propio proyecto. Esto me parece ridículo, solo para hacer feliz a Javadoc. Supongo que esta es solo una de las razones por las que tanta gente se apega a Java 8.

rü-
fuente
0

Hubo una significativa ruptura cambios desde Java 9 para el uso de la API Doclet

JEP 221: API simplificada de Doclet
Reemplaza la antigua API de Doclet con una nueva API simplificada que aprovecha otras API estándar existentes. El doclet estándar se ha reescrito para usar la nueva API de Doclet

La API existente y el antiguo doclet estándar están disponibles, pero no se han actualizado para admitir nuevas funciones de lenguaje, como módulos

La API anterior está usando el paquete com.sun.javadoc

La API Doclet (también llamada API Javadoc) proporciona un mecanismo para que los clientes inspeccionen la estructura a nivel fuente de programas y bibliotecas, incluidos los comentarios de javadoc incrustados en la fuente.

Puedes intentar usar la nueva API de Doclet, ver ejemplos

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();
}
usuario7294900
fuente
44
Podría estar equivocado, pero realmente no pude encontrar la solución aquí. Dada la pregunta ya leída ... ¿Alguien ha podido hacer que javadoc funcione sin tener que cambiar la versión de origen a 1.8 ..
Naman
"La API existente y el antiguo doclet estándar están disponibles, pero no se han actualizado para admitir nuevas funciones de lenguaje, como los módulos" Entonces, ¿esto significa que javadoc está roto para las versiones 9 y superiores? Además, mi problema es con Maven que informa este error de maven-javadoc-plugin. No estoy seguro de cómo ayudaría el código que publicó anteriormente.
Rafael Ibasco
1
No creo que @RafaelIbasco estuviera escribiendo doclets. Esta respuesta parece no ser útil.
rü-