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.

Alguém conseguiu fazer o javadoc funcionar sem precisar alterar a versão de origem para 1.8 (conforme sugerido em outros fóruns)? Estou usando o JDK v11.0.5 e o problema ainda está presente (também com o JDK 12+).

Edit: Este erro foi originado do maven e lançado pelo maven-javadoc-plugin. Não consegui fazê-lo funcionar no JDK 11+, mesmo com a <source>8</source>configuração.

Rafael Ibasco
fonte
Relacionados bugs.openjdk.java.net/browse/JDK-8212233
user7294900
Eu acho que essa pergunta precisa de mais alguns detalhes. Você usa maven? Você usa ou tentou usar módulos em seu projeto?
ru-
@ rü- você está certo, eu atualizei o post, obrigado. Sim, estou usando o maven com uma configuração de vários módulos.
Rafael Ibasco 18/11/19

Respostas:

7

Conforme sugerido no rastreador de problemas do OpenJDK, isso pode ser contornado com a definição da fonte no plugin Javadoc:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <source>8</source>
    </configuration>
</plugin>
Roman Grigoriadi
fonte
3
Provavelmente, você não leu a pergunta completamente. O OP mencionou claramente:Has anyone been able to make javadoc work without having to change the source version to 1.8
Arvind Kumar Avinash
11
funciona para mim. Eu uso: <configuration> <source> $ {java.version} </source> </configuration> e nas propriedades é o java 11. Eu apenas precisei especificar a versão por algum motivo.
ranma2913 9/03
Como você pode fazer isso em Gradle?
Raffi Khatchadourian 25/03
1

O javadoc produz links para pacotes que você usa, por exemplo, para classes documentadas .../javase/11/docs/api. Enquanto seus comentários estão em um módulo sem nome, os destinos não estão e o javadoc não pode combinar esses dois. Ele produz package-listum element-listarquivo ou um arquivo, portanto você não pode misturar módulos não nomeados (pacotes) com módulos nomeados.

Não encontrei uma maneira de limitar os links que o javadoc tenta produzir; então você pode precisar usar módulos para seu próprio projeto. Isso me parece ridículo, apenas para fazer javadoc feliz. Eu acho que essa é apenas uma das razões pelas quais tantas pessoas aderem ao Java 8.

rü-
fonte
0

Houve uma significativa quebra mudança desde Java 9 para usar Doclet API

JEP 221: API simplificada do Doclet
Substitui a API antiga do Doclet por uma nova API simplificada que aproveita outras APIs padrão existentes. O doclet padrão foi reescrito para usar a nova API do Doclet

A API existente e o doclet padrão antigo estão disponíveis, mas não foram atualizados para oferecer suporte a novos recursos de idioma, como módulos

A API antiga está usando o pacote com.sun.javadoc

A API do Doclet (também chamada de API Javadoc) fornece um mecanismo para os clientes inspecionarem a estrutura de programas e bibliotecas no nível da fonte, incluindo comentários javadoc incorporados na fonte.

Você pode tentar usar a nova API do Doclet, veja exemplos

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
fonte
4
Posso estar errado, mas não consegui descobrir a parte da solução aqui. Dada a questão já leu .. Alguém já foi capaz de fazer o trabalho javadoc sem ter que mudar a versão de origem para 1,8 ..
Naman
"A API existente e o doclet padrão antigo estão disponíveis, mas não foram atualizados para oferecer suporte a novos recursos de idioma, como módulos" Então isso significa que o javadoc está quebrado para as versões 9 e posteriores? Além disso, meu problema é com o maven relatando esse erro no maven-javadoc-plugin. Não sei como o código que você postou acima ajudaria.
Rafael Ibasco 14/11/19
11
Eu não acho que @RafaelIbasco estava escrevendo documentos. Esta resposta não parece útil.
ru-