Maven n'est pas de travail dans Java 8 lors de la Javadoc, les balises sont incomplètes
Depuis que j'utilise Maven, j'ai été en mesure de construire et d'installer dans mon dépôt local des projets qui ont incomplète Javadoc balises (par exemple, un paramètre manquant).
Cependant, depuis que j'ai migré vers Java 8 (1.8.0-ea-b90) Maven est absolument stricte sur le manque de documentation sur les tags et me montrer beaucoup de Javadoc des erreurs liées à la Javadoc des problèmes lorsque j'essaie de construire ou d'installer un projet où la Javadoc n'est pas "parfait". Certains des projets que je suis en train de compiler et de l'installer dans mon référentiel local sont des projets de tiers à partir de laquelle je n'ai pas de contrôle. Donc, la solution de juste à la fixation de tous les Javadocs dans tous ces projets ne semble pas être réalisable dans mon scénario.
C'est une petite partie de la sortie, je vois quand j'execute 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] ^
La Javadoc Maven plugin est configuré comme ça 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 dit avant, tout fonctionne très bien si je reviens vers Java 7.
Peut-être est-ce un bug lié à l'exécution de Maven dans Java 8?
Comment pourrais-je le faire fonctionner (c'est à dire, être en mesure de construire la Javadoc du projet et d'installer son code dans mon dépôt local) avec Java 8?
J'ai testé avec les deux Maven 3.0.3 et 3.0.5 dans OSX.
Mise à JOUR:
Si je change mon Javadoc de configuration du plugin 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>
Puis le projet est installé dans mon dépôt local. Cependant, la Javadoc POT n'est pas encore généré.
Un fragment de la sortie, je vois dans la console avec cette nouvelle configuration est:
[ERREUR] MavenReportException: Erreur lors de la création de l'archive: Sortie
code: 1 - /Users/....java:18: avertissement: aucune @param ... de la ligne de Commande
a: /Library/Java/Home/bin/javadoc @options @paquetsReportez-vous à la générées Javadoc fichiers dans
/Utilisateurs/sergioc/Documents/espaces de travail/heal/minitoolbox/cible/apidocs'
dir.à
org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeJavadocCommandLine(AbstractJavadocMojo.java:5043)
au
org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeReport(AbstractJavadocMojo.java:1990)
au
org.apache.maven.plugin.javadoc.JavadocJar.execute(JavadocJar.java:181)
au
org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
au
org.apache.maven.cycle de vie.interne.MojoExecutor.execute(MojoExecutor.java:209)
au
org.apache.maven.cycle de vie.interne.MojoExecutor.execute(MojoExecutor.java:153)
au
org.apache.maven.cycle de vie.interne.MojoExecutor.execute(MojoExecutor.java:145)
au
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
au
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
au
org.apache.maven.cycle de vie.interne.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
au
org.apache.maven.cycle de vie.interne.LifecycleStarter.execute(LifecycleStarter.java:161)
au 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.domaine(MavenCli.java:196) à
org.apache.maven.cli.MavenCli.principale(MavenCli.java:141) à
soleil.de réfléchir.NativeMethodAccessorImpl.invoke0(Native method) at
soleil.de réfléchir.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
au
soleil.de réfléchir.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
à java.lang.de réfléchir.La méthode.invoke(la Méthode.java:491) à
org.codehaus.plexus.classworlds.lanceur.Lanceur.launchEnhanced(Lanceur.java:290)
au
org.codehaus.plexus.classworlds.lanceur.Lanceur.lancement du Lanceur.java:230)
au
org.codehaus.plexus.classworlds.lanceur.Lanceur.mainWithExitCode(Lanceur.java:409)
au
org.codehaus.plexus.classworlds.lanceur.Lanceur.principale(Lanceur.java:352)
Aucune solution de contournement sur la façon de compiler les sources, installez le projet et de générer la Javadoc POT en une seule étape, car il a été de travailler avec Java 7?
- Salut @75inchpianist, j'ai mis à jour la question, en fait, ils sont des erreurs (bien que de manière assez surprenante, la dernière ligne de l'erreur fait référence à un avertissement, comme vous pouvez le voir dans la sortie générée). Le projet n'est pas installé dans mon dépôt local, de sorte qu'il n'est pas considéré comme un simple avertissement 🙁
- Pour GoogleJuice: j'ai eu le message d'erreur "erreur: mauvaise utilisation de la" > "" parce que j'avais une grosse flèche en commentaire JavaDoc
- Il sera peut-être utile pour quelqu'un: Vous pouvez facilement trouver tout ce incomplète des balises à l'Ide, par l'exécution de l'inspection Ctrl+Alt+Shift+i "Déclaration a JavaDoc problèmes"
- Ce n'est pas maven, c'est la javadoc programme, qui a obtenu beaucoup plus stricte dans Java 8.
Vous devez vous connecter pour publier un commentaire.
La meilleure solution serait de fixer la javadoc des erreurs. Si, pour une raison qui n'est pas possible (c'est à dire: génération automatique de code source), vous pouvez désactiver cette case.
DocLint est une nouvelle fonctionnalité de Java 8, qui est résumé comme suit:
Cette option est activée par défaut, et va exécuter tout un tas de vérifications avant de générer la documentation Javadoc. Vous avez besoin de désactiver cette fonction pour Java 8, comme spécifié dans ce fil. Vous aurez à ajouter à votre maven configuration:
Pour maven-javadoc-plugin 3.0.x:
Remplacer
avec
javadoc
ne connaît pas cette option.-Xdoclint:-html
<doclint>none</doclint>
. Voir maven.apache.org/plugins/maven-javadoc-plugin/...<additionalparam/>
est remplacé par<additionalOptions/>
. Voir issues.apache.org/jira/browse/MJAVADOC-475dpkg -L maven
implique/etc/maven/settings
. Et en cours d'exécution:find . -name "*plugin*"
dans/usr/share/maven
(également répertoriés dansdpkg -L output
) montre../lib/maven-plugin-api-3.x.jar
L'approche la plus facile à faire que les choses fonctionnent à la fois avec java 8 et java 7 est d'utiliser un profil dans la construction:
Ici est le plus concis, je suis conscient de l'ignorer doclint avertissements indépendamment de la version de java utilisée. Il n'y a pas besoin 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.
build
etprofiles
de haut niveau des blocs dans mavenpom.xml
. maven.apache.org/pom.html#Build.Ajouter dans les propriétés globales de la section dans le fichier pom:
La solution commune dans les autres réponses (en ajoutant que la propriété de la section plugins) ne fonctionne pas pour une raison quelconque. Que par la mise à l'échelle mondiale je pouvais construire la javadoc pot avec succès.
Les plus brefs solution qui fonctionnera avec n'importe quelle version de Java:
Viens de l'ajouter à votre POM et vous êtes bon pour aller.
C'est fondamentalement @ankon réponse plus @zapp réponse.
Pour maven-javadoc-plugin 3.0.0 utilisateurs:
Remplacer
<additionalparam>-Xdoclint:none</additionalparam>
par
<doclint>none</doclint>
<additionalJOption>-Xdoclint:none</additionalJOption>
ou<doclint>none</doclint>
propriété à votre<properties>
<doclint>none</doclint>
(sans la version de JDK-fonction d'activation), il va encore échouer sur JDK moins de 1,8, ou ne maven-javadoc-plugin détecter automatiquement si ledoclint
option est prise en charge par la version actuelle de Java?Primordial
maven-javadoc-plugin
que dans la configuration, ne permet pas de résoudre le problème avecmvn site
(électroniques.g lors de la phase de l'émission). Voici ce que j'ai eu à faire:maven-javadoc-plugin
via le<reportPlugins>
section de lamaven-site-plugin
est pas recommandé pour les dernières versions de Maven 3.Je ne pense pas que juste éteindre DocLint est une bonne solution, du moins pas à long terme. Il est bon que la Javadoc est devenu un peu plus strict, donc la bonne façon de résoudre le construire problème est de résoudre le problème sous-jacent. Oui, vous aurez besoin de réparer ces fichiers de code source.
Voici les choses à regarder dehors pour que vous pourriez déjà sortir avec:
{@link }
s. (en va de même pour les mêmes balises comme@see
)@author
valeurs. Cette habitude d'être accepté :@author John <[email protected]>
mais pas plus à cause de la non échappée des crochets.Vous devrez simplement de fixer vos fichiers de code source et de continuer à construire votre Javadoc jusqu'à ce qu'il peut construire sans échec. Lourd oui, mais personnellement, j'aime quand j'ai amené mes projets jusqu'à DocLint, parce que cela signifie que je peux être plus confiants que la Javadoc je produis, c'est effectivement ce que j'ai l'intention.
Il y a bien sûr le problème si vous êtes la génération Javadoc sur certains le code source vous n'avez pas produit vous-même, par exemple parce qu'il provient d'un générateur de code, par exemple wsimport. Étrange que l'Oracle n'a pas de préparer leurs propres outils pour JDK8 de la conformité avant de le relâcher JDK8. Il semble il ne sera pas fixé jusqu'à Java 9. Seulement dans ce cas particulier, je vous suggère de désactiver DocLint comme indiqué ailleurs sur cette page.
wsimport
pour devenir une partie de la Javadoc.Vous pouvez essayer le réglage de la
failOnError
propriété (voir plugin documentation) àfalse
:Comme vous pouvez le voir à partir de la documentation, la valeur par défaut est
true
.Car il dépend de la version de votre JRE qui est utilisé pour exécuter la commande maven, vous probablement ne voulez 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
-Dadditionalparam=-Xdoclint:none
et tous vos builds vont travailler avec Java 8.mvn org.apache.maven.plugins:maven-javadoc-plugin:3.1.0:jar -DadditionalJOption=-Xdoclint:none
- il a travaillé pour moiLa propriété de configuration le nom a été changé à la dernière version de maven-javadoc-plugin qui est 3.0.0.
D'où le <additionalparam> ne fonctionne pas. Nous avons donc de le modifier comme ci-dessous.
doclint
documentation ici: maven.apache.org/plugins/maven-javadoc-plugin/...pom.xml
dans le projet de la src/répertoire build. Dans mon cas, tout ce que j'avais à faire était de recherchermaven-javadoc-plugin
et puis aller à la<configuration></configuration>
bloc déjà présents et ajouter<doclint>none</doclint>
. Aussi facile que de tout cela, c'est une fois que l'on sait, le contexte ici est que je suis en train de fixer un autre bug dans OpenGrok et n'ont jamais utilisé de Maven avant et ne veulent pas avoir à répéter dans un autre sous-projet juste pour avoir à comprendre comment l'appliquer rapidement des correctifs.De maven-javadoc-plugin 3.0.0 vous devez avoir l'aide de additionalJOption pour régler d'autres Javadoc option, donc si vous souhaitez Javadoc pour désactiver doclint, vous devez ajouter la propriété suivante.
Vous devez également mentionner la version de maven-javadoc-plugin comme 3.0.0 ou plus.
Je ne sais pas si ça va aider, mais même j'ai été confronté exactement le même problème très récemment avec oozie-4.2.0 version. Après avoir lu les réponses ci-dessus, j'ai juste ajouté le maven option en ligne de commande et il a travaillé pour moi. Donc, juste le partage ici.
Je suis en utilisant java 1.8.0_77, n'ai pas essayé avec java 1.7
bin/mkdistro.sh -DskipTests -Dmaven.javadoc.opts='-Xdoclint:-html'
Je voudrais ajouter un peu de perspicacité dans d'autres réponses
Dans mon cas
N'a pas fonctionné.
Imaginons que, dans mon projet, je n'ai pas vraiment besoin de javadoc à tous. Seulement quelques plugins avait eu un moment de la construction de la dépendance sur elle.
Donc, la façon la plus simple de résoudre mon problème était le suivant:
Ajouté ci-dessous
JAVA_TOOL_OPTIONS=-DadditionalJOption=-Xdoclint:aucun
à Jenkins d'emploi
configuration > compiler > Injecter des variables d'environnement pour le processus de construction > Propriétés de Contenu
Résolu mon problème de code de la construction par le biais de Jenkins, Maven 🙂
mvn release:perform
la syntaxe doit êtremvn release:perform -Darguments="-Dmaven.javadoc.skip=true"
.Donc, vous sauver de quelques heures que je n'ai pas l'essayer si il semble ne pas fonctionner:
La balise est remplacée par des versions plus récentes.
-Xdoclint
lui-même n'est pas assez, mais d'autres arguments sont nécessaires. Des versions plus récentes de lamaven-javadoc-plugin
fourniradditionalJOptions
pour les plus anciens n'en ont pas. Une solution de contournement est:<additionalJOption>"-Xdoclint:none" "--allow-script-in-comments"</additionalJOption>
Guillemets sont importants, sinon le plugin ajoute et ne prévoit qu'une seule arg au lieu de deux, ce qui entraînewrong args
erreurs.javadoc: error - Illegal package name: ""-Xdoclint:none" "--allow-script-in-comments""
L'extérieur des guillemets sont ajoutés par l'enregistrement de déclaration et ne sont pas présents sur la coque. Je crois que le problème c'est que sur Windowsjavadoc
est exécuté parcmd.exe
, qui traite d'une grande chaîne de ligne de commande et divise leadditionalJOption
comme prévu. Sur Linux, les arguments sont passés individuellement pour le processus directement etadditionalJOption
est transmis comme un argument, conduisant à l'erreur.Process Monitor
,cmd.exe
n'est pas utilisé. Java la plus probable tout simplement construit une grande ligne de commande et le passe àCreateProcess
, afin qu'il soit analysé par Windows comme prévu: le Fractionnement args à des espaces tout en honorant les guillemets.Ignorer manquant
@param
et@return
étiquettes, il suffit de désactiver lemissing
doclint groupe. De cette façon, la javadoc sera toujours vérifiée au niveau supérieur et les questions de syntaxe:Noter que c'est pour le plugin de la version 3.0 ou plus récente.
Je suis un peu en retard à la fête, mais j'ai été forcé à la recherche de la solution de rechange aussi, retrouvé ici, et puis trouvé.
Voici ce qui fonctionne pour moi:-
Et de démarrer votre Maven build, n'importe quelle distribution Linux construire etc. Bonne chose à propos de ce qu'il ne nécessite pas de Maven config modification des fichiers - je ne pouvais pas le faire car mon objectif était de reconstruire un tas de Centos les paquets rpm, j'ai donc dû aller très profond.
Utilisation
Au lieu de