Depuis que j'utilise Maven, j'ai pu créer et installer dans mes projets de référentiel local des balises Javadoc incomplètes (par exemple, un paramètre manquant).
Cependant, depuis que j'ai migré vers Java 8 (1.8.0-ea-b90) Maven est absolument strict sur les balises de documentation manquantes et me montre beaucoup d'erreurs Javadoc liées aux problèmes Javadoc lorsque j'essaie de construire ou d'installer un projet où le Javadoc n'est pas "parfait". Certains des projets que j'essaye de compiler et d'installer dans mon référentiel local sont des projets tiers dont je n'ai pas le contrôle. Ainsi, la solution de contournement consistant à simplement réparer tous les Javadocs dans tous ces projets ne semble pas réalisable dans mon scénario.
Ceci est une petite partie de la sortie que je vois lorsque j'exécute mvn clean package install
dans mon projet:
[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] ^
Le plugin Javadoc Maven est configuré comme ceci dans mon 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>
Comme je l'ai déjà dit, tout fonctionne bien si je reviens à Java 7. Peut-être est-ce un bug lié à Maven fonctionnant en Java 8? Comment pourrais-je le faire fonctionner (c'est-à-dire pouvoir construire le Javadoc du projet et installer son code dans mon dépôt local) avec Java 8? J'ai testé avec Maven 3.0.3 et 3.0.5 sous OSX.
METTRE À JOUR:
Si je change ma configuration de plugin Javadoc avec <failOnError>false</failOnError>
(merci 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>
Ensuite, le projet est installé dans mon référentiel local. Cependant, le JAR Javadoc n'est toujours pas généré.
Un fragment de la sortie que je vois dans la console avec cette nouvelle configuration est:
[ERREUR] MavenReportException: erreur lors de la création de l'archive: code de sortie: 1 - /Users/....java:18: avertissement: pas de @param ... La ligne de commande était: / Library / Java / Home / bin / javadoc @options @paquets
Reportez-vous aux fichiers Javadoc générés dans le répertoire '/ Users / sergioc / Documents / workspaces / heal / minitoolbox / target / apidocs'.
à org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeJavadocCommandLine (AbstractJavadocMojo.java:5043) à org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeReport (AbstractJavadocMojo.executeReport (RésuméJavadocMojo.executeReport) .javadoc.JavadocJar.execute (JavadocJar.java:181) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:101) at org.apache.maven.lifecycle.internal.MojoExecutor : 209) sur org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:153) sur org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:145) sur org.apache. maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:84) sur org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:59) à org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild (LifecycleStarter.java:183) à org.apache.maven.lifecycle.internal.LifecycleStarter.execute (Ljecycle). à org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:320) à org.apache.maven.DefaultMaven.execute (DefaultMaven.java:156) à org.apache.maven.cli.MavenCli.execute (MavenCli.java : 537) à org.apache.maven.cli.MavenCli.doMain (MavenCli.java:196) à org.apache.maven.cli.MavenCli.main (MavenCli.java:141) à sun.reflect.NativeMethodAccessorImpl.invoke0 ( Native Method) sur sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) sur sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) sur java.lang.reflect.Method.invoquer (Method.java:491) sur org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:290) sur org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:230) à org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:409) à org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:352)
Une solution de contournement sur la façon de générer les sources, d'installer le projet et de générer le JAR Javadoc en une seule étape alors qu'il fonctionnait avec Java 7?
Réponses:
La meilleure solution serait de corriger les erreurs javadoc. Si pour une raison quelconque, cela n'est pas possible (par exemple: code source généré automatiquement), vous pouvez désactiver cette vérification.
DocLint est une nouvelle fonctionnalité de Java 8 , qui se résume comme suit:
Ceci est activé par défaut et exécutera de nombreuses vérifications avant de générer des Javadocs. Vous devez désactiver cela pour Java 8 comme spécifié dans ce fil . Vous devrez l'ajouter à votre configuration maven:
Pour maven-javadoc-plugin 3.0.0+: Remplacer
avec
la source
javadoc
il ne connaît pas cette option.<doclint>none</doclint>
. Voir maven.apache.org/plugins/maven-javadoc-plugin/…<additionalparam/>
est remplacé par<additionalOptions/>
. Voir issues.apache.org/jira/browse/MJAVADOC-475L'approche la plus simple pour que les choses fonctionnent avec java 8 et java 7 consiste à utiliser un profil dans la build:
la source
Voici le moyen le plus concis que je connaisse pour ignorer les avertissements doclint quelle que soit la version java utilisée. Il n'est pas nécessaire de dupliquer la configuration du plugin dans plusieurs profils avec de légères modifications.
Testé sur oracle / open jdk 6, 7, 8 et 11.
la source
build
etprofiles
sont des blocs de niveau supérieur dans mavenpom.xml
. maven.apache.org/pom.html#Build .Ajoutez dans la section des propriétés globales du fichier pom:
La solution commune fournie ici dans les autres réponses (en ajoutant cette propriété dans la section plugins) n'a pas fonctionné pour une raison quelconque. Ce n'est qu'en le définissant globalement que j'ai pu construire le pot javadoc avec succès.
la source
La solution la plus courte qui fonctionnera avec n'importe quelle version Java:
Ajoutez simplement cela à votre POM et vous êtes prêt à partir.
Ceci est essentiellement @ la réponse de ankon , plus @ la réponse de Zapp .
Pour les utilisateurs de maven-javadoc-plugin 3.0.0:
Remplacer
<additionalparam>-Xdoclint:none</additionalparam>
par
<doclint>none</doclint>
la source
<additionalJOption>-Xdoclint:none</additionalJOption>
une<doclint>none</doclint>
propriété à votre<properties>
<doclint>none</doclint>
(sans activation basée sur la version JDK), est-ce qu'il échouera toujours sur JDK inférieur à 1,8, ou maven-javadoc-plugin détectera-t-il automatiquement si l'doclint
option est prise en charge par la version actuelle de Java?Je ne pense pas que désactiver DocLint soit une bonne solution, du moins pas à long terme. Il est bon que Javadoc soit devenu un peu plus strict, donc la bonne façon de résoudre le problème de construction est de résoudre le problème sous-jacent . Oui, vous devrez finalement corriger ces fichiers de code source.
Voici les choses à surveiller avec lesquelles vous pourriez vous en sortir:
{@link }
s. (il en va de même pour des balises similaires telles que@see
)@author
Valeurs invalides . Auparavant, cela était accepté:@author John <[email protected]>
mais ce n'est plus le cas à cause des crochets non échappés.Vous devrez simplement corriger vos fichiers de code source et continuer à construire votre Javadoc jusqu'à ce qu'il puisse être construit sans échec. Lourd oui, mais personnellement j'aime quand j'ai porté mes projets au niveau DocLint parce que cela signifie que je peux être plus confiant que le Javadoc que je produis est en fait ce que j'ai l'intention.
Il y a bien sûr le problème si vous générez Javadoc sur du code source que vous n'avez pas produit vous-même, par exemple parce qu'il provient d'un générateur de code, par exemple wsimport . Il est étrange qu'Oracle n'ait pas préparé ses propres outils pour la conformité JDK8 avant de publier JDK8. Il semble qu'il ne sera pas corrigé avant Java 9 . Seulement dans ce cas particulier, je suggère de désactiver DocLint comme indiqué ailleurs sur cette page.
la source
wsimport
pour faire partie de Javadoc.Ignorer la
maven-javadoc-plugin
configuration uniquement, ne résout pas le problème avecmvn site
(utilisé par exemple pendant la phase de publication). Voici ce que je devais faire:la source
maven-javadoc-plugin
via via la<reportPlugins>
section dumaven-site-plugin
n'est pas recommandée pour les versions récentes de Maven 3.Vous pouvez essayer de définir la
failOnError
propriété (voir la documentation du plugin ) surfalse
:Comme vous pouvez le voir dans les documents, la valeur par défaut est
true
.la source
Comme cela dépend de la version de votre JRE qui est utilisée pour exécuter la commande maven, vous ne voulez probablement pas désactiver
DocLint
par défaut dans votre pom.xmlPar conséquent, à partir de la ligne de commande, vous pouvez utiliser le commutateur
-Dadditionalparam=-Xdoclint:none
.Exemple:
mvn clean install -Dadditionalparam=-Xdoclint:none
la source
-Dadditionalparam=-Xdoclint:none
et toutes vos versions fonctionneront avec Java 8.mvn org.apache.maven.plugins:maven-javadoc-plugin:3.1.0:jar -DadditionalJOption=-Xdoclint:none
- cela a fonctionné pour moiLe nom de la propriété de configuration a été modifié dans la dernière version de maven-javadoc-plugin qui est 3.0.0.
Par conséquent, le <additionalparam> ne fonctionnera pas. Nous devons donc le modifier comme ci-dessous.
la source
doclint
documentation ici: maven.apache.org/plugins/maven-javadoc-plugin/…pom.xml
le répertoire src / build du projet. Dans mon cas, tout ce que j'avais à faire était de recherchermaven-javadoc-plugin
puis d'aller dans le<configuration></configuration>
bloc déjà présent et d'ajouter<doclint>none</doclint>
. Aussi simple que tout cela soit une fois que l'on sait, le contexte ici est que j'essaie de corriger un bogue différent dans OpenGrok et que je n'ai jamais utilisé Maven auparavant et que je ne veux pas avoir à rentrer dans un autre sous-projet juste pour avoir à comprendre comment appliquer des correctifs rapides.Je voudrais ajouter un aperçu d'autres réponses
Dans mon cas
Ça n'a pas marché.
Commençons par ça, dans mon projet, je n'avais pas vraiment besoin de javadoc. Seuls certains plugins nécessaires avaient une dépendance de temps de construction.
Donc, la façon la plus simple de résoudre mon problème était:
la source
Depuis maven-javadoc-plugin 3.0.0, vous auriez dû utiliser additionalJOption pour définir une option Javadoc supplémentaire, donc si vous souhaitez que Javadoc désactive doclint, vous devez ajouter la propriété suivante.
Vous devez également mentionner la version de maven-javadoc-plugin comme 3.0.0 ou supérieure.
la source
Alors, économisez-vous quelques heures que je n'ai pas faites et essayez ceci si cela ne semble pas fonctionner:
La balise est modifiée pour les versions plus récentes.
la source
-Xdoclint
ne suffit pas, mais des arguments supplémentaires sont nécessaires. Les nouvelles versions de lamaven-javadoc-plugin
prévoientadditionalJOptions
cela, les anciennes non. Une solution de contournement est la suivante: les<additionalJOption>"-Xdoclint:none" "--allow-script-in-comments"</additionalJOption>
citations sont importantes, sinon le plugin les ajoute et suppose un seul argument au lieu de deux, ce qui entraîne deswrong args
erreurs.javadoc: error - Illegal package name: ""-Xdoclint:none" "--allow-script-in-comments""
les guillemets externes sont ajoutés par l'instruction de journalisation et ne sont pas présents sur le shell. Je suppose que le problème est que sur Windowsjavadoc
est exécuté parcmd.exe
, qui analyse une grande chaîne en ligne de commande et divise leadditionalJOption
comme prévu. Sous Linux, les arguments sont transmis individuellement au processus directement etadditionalJOption
sont transmis comme un argument, ce qui entraîne l'erreur.Process Monitor
,cmd.exe
n'est pas utilisé. Java construit très probablement simplement une grande ligne de commande et la transmet àCreateProcess
, afin qu'elle soit analysée par Windows comme prévu: Fractionner les arguments dans les espaces tout en respectant les guillemets.Ajouté ci-dessous
Dans le travail Jenkins:
Configuration> Environnement de génération> Injection de variables d'environnement au processus de génération> Contenu des propriétés
Résolu mon problème de construction de code via Jenkins Maven :-)
la source
mvn release:perform
la syntaxe doit êtremvn release:perform -Darguments="-Dmaven.javadoc.skip=true"
.Je ne sais pas si cela va aider, mais même j'ai rencontré le même problème très récemment avec la version oozie-4.2.0 . Après avoir lu les réponses ci-dessus, je viens d'ajouter l'option maven via la ligne de commande et cela a fonctionné pour moi. Donc, juste partager ici.
J'utilise java 1.8.0_77 , je n'ai pas essayé avec java 1.7
bin / mkdistro.sh -DskipTests -Dmaven.javadoc.opts = '- Xdoclint: -html'
la source
Pour ignorer les balises manquantes
@param
et@return
, il suffit de désactiver lemissing
groupe doclint . De cette façon, le javadoc sera toujours vérifié pour les problèmes de niveau supérieur et de syntaxe:Notez que c'est pour le plugin version 3.0 ou plus récent.
la source
Je suis un peu en retard à la fête, mais j'ai également été obligé de chercher une solution de contournement, je me suis retrouvé ici, puis je l'ai trouvé.
Voici ce qui fonctionne pour moi: -
Et puis démarrez votre build Maven, n'importe quelle build de distribution Linux, etc. Heureusement qu'il ne nécessite pas de modification des fichiers de configuration Maven - je ne pouvais pas le faire car mon objectif était de reconstruire un tas de paquets rpm Centos , donc je devais aller vraiment en profondeur.
la source