Desde que eu uso o Maven, fui capaz de criar e instalar em meus projetos de repositório local que possuem tags Javadoc incompletas (por exemplo, um parâmetro ausente).
No entanto, desde que eu migrei para o Java 8 (1.8.0-ea-b90), o Maven é absolutamente rigoroso quanto à falta de tags de documentação e me mostra muitos erros do Javadoc relacionados a problemas do Javadoc quando tento criar ou instalar um projeto onde o Javadoc não está "perfeito". Alguns dos projetos que estou tentando compilar e instalar no meu repositório local são projetos de terceiros dos quais não tenho controle. Portanto, a solução alternativa de apenas corrigir todos os Javadocs em todos esses projetos não parece viável no meu cenário.
Esta é uma pequena parte da saída que vejo quando executo mvn clean package install
no meu projeto:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.026s
[INFO] Finished at: Mon Apr 08 21:06:17 CEST 2013
[INFO] Final Memory: 27M/437M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.9:jar (attach-javadocs) on project jpc: MavenReportException: Error while creating archive:
[ERROR] Exit code: 1 - /Users/sergioc/Documents/workspaces/heal/jpc/src/main/java/org/jpc/engine/prolog/PrologDatabase.java:10: error: @param name not found
[ERROR] * @param terms the terms to assert
[ERROR] ^
[ERROR] /Users/sergioc/Documents/workspaces/heal/jpc/src/main/java/org/jpc/engine/prolog/PrologDatabase.java:11: warning: no description for @return
[ERROR] * @return
[ERROR] ^
O plug-in Javadoc Maven está configurado assim no meu POM:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
Como eu disse antes, tudo está funcionando bem se eu voltar ao Java 7. Talvez isso seja um bug relacionado ao Maven em execução no Java 8? Como eu poderia fazê-lo funcionar (ou seja, poder construir o Javadoc do projeto e instalar seu código no meu repositório local) com o Java 8? Eu testei com o Maven 3.0.3 e 3.0.5 no OSX.
ATUALIZAR:
Se eu alterar minha configuração de plug-in Javadoc com <failOnError>false</failOnError>
(obrigado Martin):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
Em seguida, o projeto é instalado no meu repositório local. No entanto, o Javadoc JAR ainda não foi gerado.
Um fragmento da saída que vejo no console com esta nova configuração é:
[ERRO] MavenReportException: erro ao criar arquivo: código de saída: 1 - /Users/....java:18: aviso: no @param ... A linha de comando era: / Library / Java / Home / bin / javadoc @options @packages
Consulte os arquivos Javadoc gerados em '/ Users / sergioc / Documents / workspaces / heal / minitoolbox / target / apidocs' dir.
em org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeJavadocCommandLine (AbstractJavadocMojo.java:5043) em org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeReport (AbstractJavadocMojo.java.99) .javadoc.JavadocJar.execute (JavadocJar.java:181) em org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:101) em org.apache.maven.lifecycle.internal.MojoExecutor.exava. : 209) em org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:153) em org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:145) em org.apache. maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:84) em org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:59) em org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild (LifecycleStarter.java:183) em org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:16): em org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:320) em org.apache.maven.DefaultMaven.execute (DefaultMaven.java:156) em org.apache.maven.cli.MavenCli.execute (MavenCli.java : 537) em org.apache.maven.cli.MavenCli.doMain (MavenCli.java:196) em org.apache.maven.cli.MavenCli.main (MavenCli.java:141) em sun.reflect.NativeMethodAccessorImpl.invoke0 ( Método nativo) em sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) em sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) em java.lang.reflect.Method.invocar (Method.java:491) em org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:290) em org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:230) em org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:409) em org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:352)
Alguma solução alternativa sobre como construir as fontes, instalar o projeto e gerar o Javadoc JAR em uma etapa, como estava trabalhando com o Java 7?
Respostas:
A melhor solução seria corrigir os erros do javadoc. Se, por algum motivo, isso não for possível (código fonte gerado automaticamente), você poderá desativar esta verificação.
DocLint é um novo recurso do Java 8 , resumido em:
Isso é ativado por padrão e executa várias verificações antes de gerar Javadocs. É necessário desativar isso no Java 8, conforme especificado neste encadeamento . Você precisará adicionar isso à sua configuração do maven:
Para maven-javadoc-plugin 3.0.0+: Substitua
com
fonte
javadoc
não conhece essa opção.<doclint>none</doclint>
. Veja maven.apache.org/plugins/maven-javadoc-plugin/...<additionalparam/>
é substituído por<additionalOptions/>
. Veja Issues.apache.org/jira/browse/MJAVADOC-475A abordagem mais fácil para fazer as coisas funcionarem com o java 8 e o java 7 é usar um perfil na compilação:
fonte
Aqui está a maneira mais concisa de ignorar os avisos de documentos, independentemente da versão java usada. Não há necessidade de duplicar a configuração do plug-in em vários perfis com pequenas modificações.
Testado no oracle / open jdk 6, 7, 8 e 11.
fonte
build
eprofiles
são blocos de nível superior em mavenpom.xml
. maven.apache.org/pom.html#Build .Adicione na seção de propriedades globais no arquivo pom:
A solução comum fornecida aqui nas outras respostas (adicionando essa propriedade na seção de plug-ins) não funcionou por algum motivo. Somente configurando-o globalmente eu pude construir o jar javadoc com sucesso.
fonte
A solução mais curta que funcionará com qualquer versão Java:
Basta adicionar isso ao seu POM e você estará pronto.
Este é basicamente resposta da @ Ankon além de @ resposta de Zapp .
Para usuários do maven-javadoc-plugin 3.0.0:
Substituir
<additionalparam>-Xdoclint:none</additionalparam>
de
<doclint>none</doclint>
fonte
<additionalJOption>-Xdoclint:none</additionalJOption>
ou<doclint>none</doclint>
propriedade ao seu<properties>
<doclint>none</doclint>
(sem ativação baseada na versão do JDK), ele ainda falhará no JDK menor que 1.8 ou o maven-javadoc-plugin detecta automaticamente se adoclint
opção é suportada pela versão atual do Java?Não acho que desligar o DocLint é uma boa solução, pelo menos não a longo prazo. É bom que o Javadoc tenha se tornado um pouco mais rigoroso, portanto, a maneira correta de corrigir o problema de compilação é consertar o problema subjacente . Sim, você precisará corrigir esses arquivos de código-fonte.
Aqui estão as coisas a serem observadas com as quais você poderia se safar:
{@link }
S inválidos . (o mesmo vale para tags semelhantes, como@see
)@author
Valores inválidos . Isso costumava ser aceito:@author John <[email protected]>
mas não mais por causa dos colchetes não escapados.Você simplesmente precisará corrigir os arquivos de código-fonte e continuar construindo seu Javadoc até que ele possa ser construído sem falhas. Pesado, sim, mas pessoalmente gosto quando elevo meus projetos ao nível do DocLint porque significa que posso ter mais certeza de que o Javadoc que produzo é realmente o que pretendo.
Obviamente, existe o problema se você estiver gerando Javadoc em algum código-fonte que você não produziu, por exemplo, porque ele vem de algum gerador de código, por exemplo, wsimport . Estranho que a Oracle não tenha preparado suas próprias ferramentas para conformidade com o JDK8 antes de realmente lançar o JDK8. Parece que não será corrigido até o Java 9 . Somente neste caso específico, sugiro desativar o DocLint conforme documentado em outras partes desta página.
fonte
wsimport
para se tornar parte do Javadoc.Substituir
maven-javadoc-plugin
apenas a configuração não resolve o problemamvn site
(usado, por exemplo, durante o estágio de lançamento). Aqui está o que eu tinha que fazer:fonte
maven-javadoc-plugin
via a<reportPlugins>
seção do nãomaven-site-plugin
é recomendada para versões recentes do Maven 3. #Você pode tentar configurar a
failOnError
propriedade (consulte a documentação do plug-in ) parafalse
:Como você pode ver a partir dos documentos, o valor padrão é
true
.fonte
Como depende da versão do seu JRE que é usada para executar o comando maven, você provavelmente não deseja desativar
DocLint
por padrão no seu pom.xmlPortanto, na linha de comando, você pode usar o switch
-Dadditionalparam=-Xdoclint:none
.Exemplo:
mvn clean install -Dadditionalparam=-Xdoclint:none
fonte
-Dadditionalparam=-Xdoclint:none
e todas as suas compilações funcionarão com o Java 8. #mvn org.apache.maven.plugins:maven-javadoc-plugin:3.1.0:jar -DadditionalJOption=-Xdoclint:none
- ele trabalhou para mimO nome da propriedade de configuração foi alterado na versão mais recente do maven-javadoc-plugin, que é 3.0.0.
Portanto, o <parâmetro adicional> não funcionará. Então, temos que modificá-lo como abaixo.
fonte
doclint
documentação aqui: maven.apache.org/plugins/maven-javadoc-plugin/…pom.xml
diretório src / build do projeto. No meu caso, tudo o que eu precisava fazer era procurarmaven-javadoc-plugin
e depois ir para o<configuration></configuration>
bloco já presente e adicionar<doclint>none</doclint>
. Por mais fácil que tudo isso seja conhecido, o contexto aqui é: estou tentando consertar um bug diferente no OpenGrok e nunca usei o Maven antes e não quero ter que recorrer a outro subprojeto só para descobrir como aplicar correções rápidas.Gostaria de acrescentar algumas dicas para outras respostas
No meu caso
Não funcionou.
Vamos começar com isso, no meu projeto, eu realmente não precisava do javadoc. Apenas alguns plugins necessários tinham uma dependência do tempo de compilação.
Então, a maneira mais simples de resolver meu problema era:
fonte
No maven-javadoc-plugin 3.0.0, você deveria estar usando adicionalJOption para definir uma opção adicional do Javadoc; portanto, se você deseja que o Javadoc desative o doclint, adicione a seguinte propriedade.
Você também deve mencionar a versão do maven-javadoc-plugin como 3.0.0 ou superior.
fonte
Portanto, economize algumas horas que eu não fiz e tente isso se parecer que não funciona:
A tag é alterada para versões mais recentes.
fonte
-Xdoclint
si só não é suficiente, mas argumentos adicionais são necessários. As versões mais recentes domaven-javadoc-plugin
prevêemadditionalJOptions
isso, as mais antigas não. Uma solução alternativa é: as<additionalJOption>"-Xdoclint:none" "--allow-script-in-comments"</additionalJOption>
aspas são importantes; caso contrário, o plug-in as adiciona e assume apenas um argumento em vez de dois, resultando emwrong args
erros.javadoc: error - Illegal package name: ""-Xdoclint:none" "--allow-script-in-comments""
as aspas externas são adicionadas pela instrução de log e não estão presentes no shell. Eu acho que o problema é que, no Windows,javadoc
é executado porcmd.exe
, que analisa uma string grande como linha de comando e divide oadditionalJOption
que foi planejado. No Linux, os argumentos são passados individualmente para o processo diretamente eadditionalJOption
são passados como um argumento, levando ao erro.Process Monitor
,cmd.exe
não é usado. O Java provavelmente cria uma linha de comando grande e a passa paraCreateProcess
, para que seja analisada pelo Windows como pretendido: Dividindo args em espaços e honrando aspas.Adicionado abaixo
Trabalho de Jenkins:
Configuração> Ambiente de Construção> Injetar variáveis de ambiente no processo de construção> Conteúdo das Propriedades
Resolvi meu problema de criação de código através do Jenkins Maven :-)
fonte
mvn release:perform
a sintaxe precisa sermvn release:perform -Darguments="-Dmaven.javadoc.skip=true"
.Não tenho certeza se isso vai ajudar, mas mesmo assim eu enfrentei exatamente o mesmo problema muito recentemente com oozie-4.2.0 versão . Depois de ler as respostas acima, adicionei a opção maven através da linha de comando e funcionou para mim. Então, basta compartilhar aqui.
Estou usando o java 1.8.0_77 , ainda não tentei com o java 1.7
bin / mkdistro.sh -DskipTests -Dmaven.javadoc.opts = '- Xdoclint: -html'
fonte
Para ignorar tags
@param
e@return
tags ausentes , basta desabilitar omissing
grupo de documentos . Dessa forma, o javadoc ainda será verificado quanto a problemas de nível superior e sintaxe:Observe que isso é para o plugin versão 3.0 ou mais recente.
fonte
Estou um pouco atrasado para a festa, mas também fui forçado a procurar uma solução alternativa, acabei aqui e a encontrei.
Aqui está o que funciona para mim: -
E então inicie sua compilação do Maven, qualquer compilação de distribuição do Linux etc. O interessante é que ela não requer modificação dos arquivos de configuração do Maven - eu não poderia fazer isso, pois meu objetivo era reconstruir um monte de pacotes rpm do Centos , então tive que vá muito fundo.
fonte