Maven ne fonctionne pas en Java 8 lorsque les tags Javadoc sont incomplets

depuis que J'utilise Maven, j'ai pu construire et installer dans mon dépôt local des projets qui ont des tags Javadoc incomplets (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 étiquettes de documentation manquantes et me montre beaucoup d'erreurs Javadoc liées à des problèmes Javadoc lorsque j'essaie de construire ou d'installer un projet où le Javadoc n'est pas "parfait". Quelques-uns des projets que j'essaie de compiler et installer dans mon dépôt local sont des projets tiers dont je n'ai pas le contrôle. Donc, la solution consistant à simplement réparer tous les blocs Javadocs dans tous ces projets ne semble pas être réalisable dans mon scénario.

C'est une petite partie de la sortie que je vois quand 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 est ça marche si je retourne à Java 7. Peut-être est-ce un bug lié au fonctionnement de Maven en Java 8? Comment pourrais-je le faire fonctionner (c'est-à-dire être capable de construire le Javadoc du projet et d'installer son code dans mon dépôt local) avec Java 8? J'ai testé avec Maven 3.0.3 et 3.0.5 dans OSX.

mise à jour:

si je change la configuration de mon 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>

Puis le projet est installé dans mon dépôt local. Cependant, le bocal 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: Sortie code: 1 - /Users/....java: 18: attention: no @param ... Ligne de commande a: /Library/Java/Home/bin/javadoc @options @paquets

se référer à la Les fichiers Javadoc dans /Utilisateurs/sergioc/Documents/espaces de travail/heal/minitoolbox/cible/apidocs' dir.

à org.Apache.maven.plugin.javadoc.AbstractJavadocMojo.executeJavadocCommandLine (AbstractJavadocMojo.java: 5043) à org.Apache.maven.plugin.javadoc.AbstractJavadocMojo.rapport d'exécution (AbstractJavadocMojo.java: 1990) à org.Apache.maven.plugin.javadoc.JavadocJar.exécutez (JavadocJar.java: 181) à org.Apache.maven.plugin.DefaultBuildPluginManager.executeMojo (Defaultbuild Pluginmanager.java: 101) à org.Apache.maven.cycle de vie.interne.MojoExecutor.exécuter (MojoExecutor.java: 209) à org.Apache.maven.cycle de vie.interne.MojoExecutor.exécuter (MojoExecutor.java: 153) à org.Apache.maven.cycle de vie.interne.MojoExecutor.exécuter (MojoExecutor.java: 145) à org.Apache.maven.cycle de vie.interne.LifecycleModuleBuilder.projet build (LifecycleModuleBuilder.java: 84) à org.Apache.maven.cycle de vie.interne.LifecycleModuleBuilder.projet build (LifecycleModuleBuilder.java: 59) à org.Apache.maven.cycle de vie.interne.LifecycleStarter.le seul objet construit(LifecycleStarter.java: 183) à org.Apache.maven.cycle de vie.interne.LifecycleStarter.exécuter (LifecycleStarter.java: 161) au org.Apache.maven.DefaultMaven.doexécute (DefaultMaven.java: 320) à org.Apache.maven.DefaultMaven.exécution (DefaultMaven.java:156) à org.Apache.maven.cli.MavenCli.exécutez (MavenCli.java:537) à org.Apache.maven.cli.MavenCli.domaine (MavenCli.java:196) org.Apache.maven.cli.MavenCli.main (MavenCli.java:141) soleil.refléter.NativeMethodAccessorImpl.invoke0 (méthode Native) à soleil.refléter.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java: 57) à soleil.refléter.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java: 43) à java.lang.refléter.Méthode.invoke(la Méthode.java: 491) à org.codehaus.plexus.classworlds.lanceur.Lanceur.launchEnhanced (Launcher.java: 290) à org.codehaus.plexus.classworlds.lanceur.Lanceur.lancement du Lanceur.java: 230) à org.codehaus.plexus.classworlds.lanceur.Lanceur.mainWithExitCode (lanceur.java: 409) à org.codehaus.plexus.classworlds.lanceur.Lanceur.principale(Lanceur.java: 352)

toute solution pour construire les sources, installer le projet et générer le bocal Javadoc en une seule étape comme il a été de travailler avec Java 7?

267
demandé sur dur 2013-04-08 22:23:36

17 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) alors vous pouvez désactiver cette vérification.

DocLint est une nouvelle fonctionnalité de Java 8 , qui est ainsi résumée:

fournit un moyen de détecter les erreurs dans les commentaires Javadoc tôt dans le cycle de développement et d'une manière qui est facilement liée à l' le code source.

cette option est activée par défaut, et exécutera un grand nombre de vérifications avant de générer Javadocs. Vous devez désactiver cette option pour Java 8 comme spécifié dans ce thread . Vous devrez ajouter ceci à votre configuration maven:

<profiles>
  <profile>
    <id>java8-doclint-disabled</id>
    <activation>
      <jdk>[1.8,)</jdk>
    </activation>
    <properties>
      <javadoc.opts>-Xdoclint:none</javadoc.opts>
    </properties>
  </profile>
</profiles>
<build>
  <plugins>
    <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>
                <configuration>
                    <additionalparam>${javadoc.opts}</additionalparam>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <reportPlugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-javadoc-plugin</artifactId>
              <configuration>
                <additionalparam>${javadoc.opts}</additionalparam>
              </configuration>
            </plugin>
          </reportPlugins>
        </configuration>
      </plugin>
   </plugins>
</build>

pour maven-javadoc-plugin 3.0.x: Remplacer

<additionalparam>-Xdoclint:none</additionalparam>

avec

<doclint>none</doclint>
331
répondu Subhas 2018-10-05 19:25:57

l'approche la plus simple pour obtenir des choses qui fonctionnent à la fois avec java 8 et java 7 est d'utiliser un profil dans la construction:

<profiles>
  <profile>
    <id>doclint-java8-disable</id>
    <activation>
      <jdk>[1.8,)</jdk>
    </activation>

    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <configuration>
            <additionalparam>-Xdoclint:none</additionalparam>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>
93
répondu ankon 2014-08-15 13:21:06

voici le moyen le plus concis que je connaisse pour ignorer les avertissements de 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.

<profiles>
  <profile>
    <id>doclint-java8-disable</id>
    <activation>
      <jdk>[1.8,)</jdk>
    </activation>
    <properties>
      <javadoc.opts>-Xdoclint:none</javadoc.opts>
    </properties>
  </profile>
</profiles>

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>2.9.1</version>
      <executions>
        <execution>
          <id>attach-javadocs</id> <!-- The actual id should be apparent from maven output -->
          <configuration>
            <additionalparam>${javadoc.opts}</additionalparam>
          </configuration>
        </execution>
      </executions>
    </plugin>
    ...
  </plugins>
</build>

testé sur oracle / open jdk 6, 7 et 8.

55
répondu Oliver Gondža 2017-08-07 07:36:02

ajouter dans la section propriétés globales du fichier pom:

<project>
    ...
    <properties>
        <additionalparam>-Xdoclint:none</additionalparam>
    </properties>

la solution commune fournie ici dans les autres réponses (ajoutant cette propriété dans la section plugins) n'a pas fonctionné pour une raison quelconque. Ce n'est qu'en le positionnant globalement que je pourrais construire le javadoc jar avec succès.

36
répondu zapp 2015-05-16 09:44:13

la solution la plus courte qui fonctionnera avec n'importe quelle version Java:

<profiles>
    <profile>
        <id>disable-java8-doclint</id>
        <activation>
            <jdk>[1.8,)</jdk>
        </activation>
        <properties>
            <additionalparam>-Xdoclint:none</additionalparam>
        </properties>
    </profile>
</profiles>

ajoutez ça à votre POM et vous pouvez y aller.

c'est essentiellement la réponse de @ankon plus la réponse de @zapp .


pour maven-javadoc-plugin 3.0.0 utilisateurs:

remplacer

<additionalparam>-Xdoclint:none</additionalparam>

par

<doclint>none</doclint>

32
répondu Thiago Porciúncula 2018-01-26 11:42:54

Substitution maven-javadoc-plugin que dans la configuration, ne permet pas de résoudre le problème avec mvn site (électroniques.g lors de la phase de l'émission). Voici ce que je devais faire:

<profile>
  <id>doclint-java8-disable</id>
  <activation>
    <jdk>[1.8,)</jdk>
  </activation>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
          <additionalparam>-Xdoclint:none</additionalparam>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <reportPlugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-javadoc-plugin</artifactId>
              <configuration>
                <additionalparam>-Xdoclint:none</additionalparam>
              </configuration>
            </plugin>
          </reportPlugins>
        </configuration>
      </plugin>
    </plugins>
  </build>
</profile>
30
répondu Jakub Skoczen 2014-04-10 07:15:30

Je ne pense pas que le simple fait d'éteindre 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 corriger le problème de construction est de corriger le problème sous-jacent . Oui, vous aurez finalement besoin de corriger ces fichiers de code source.

Voici les choses à surveiller que vous pourriez auparavant obtenir:

  • HTML Incorrect (par exemple, un manque une balise de fin, non échappée des supports, etc)
  • invalide {@link } art. (il en va de même pour les étiquettes similaires telles que @see )
  • valeurs invalides @author . Ceci était accepté: @author John <john.doe@mine.com> mais plus tellement en raison des crochets Non-échappés.
  • les tables HTML de Javadoc nécessitent maintenant un résumé ou une légende. Voir cette question pour explication.

Vous n'aurez tout simplement corriger 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 porté mes projets au niveau DocLint parce que cela signifie que je peux être plus sûr 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 un code source que vous n'avez pas produit vous-même, par exemple parce qu'il vient 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 il ne sera pas fixé jusqu'à Java 9 . Ce n'est que dans ce cas précis que je suggère de désactiver DocLint comme indiqué ailleurs sur cette page.

26
répondu peterh 2017-05-23 12:34:29

vous pouvez essayer de définir la propriété failOnError (voir documentation du plugin ) à false :

<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>
            <configuration>
              <failOnError>false</failOnError>
            </configuration>
        </execution>
    </executions>
</plugin>

comme vous pouvez le voir dans les documents, la valeur par défaut est true .

18
répondu Martin Ellis 2013-05-22 20:07:53

Puisqu'il dépend de la version de votre JRE qui est utilisé pour exécuter la commande maven vous propably dont veulent désactiver DocLint par défaut dans votre pom.xml

par conséquent, à partir de la ligne de commande vous pouvez utiliser le commutateur -Dadditionalparam=-Xdoclint:none .

exemple: mvn clean install -Dadditionalparam=-Xdoclint:none

17
répondu My-Name-Is 2016-05-03 15:36:39

le 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 ne fonctionnera pas. Nous devons donc la modifier comme suit.

   <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>3.0.0</version>
      <configuration>
         <doclint>none</doclint>
      </configuration>
  </plugin>
7
répondu Balachandar 2017-12-20 21:50:01

à partir de 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.

<properties>
    ...
    <additionalJOption>-Xdoclint:none</additionalJOption>
    ...
<properties>

vous devez également mentionner la version de maven-javadoc-plugin comme 3.0.0 ou plus.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>3.0.0</version>    
</plugin>
2
répondu amanzoor 2018-01-31 14:54:46

Je ne suis pas sûr que cela va aider, mais même moi a fait face au même problème très récemment avec Oozie-4.2.0 version. Après avoir lu les réponses ci-dessus, je viens d'ajouter l'option maven à travers la ligne de commande et cela a fonctionné pour moi. Donc, juste le partage 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'

1
répondu Raghu Kumar 2016-04-03 02:58:50

ajouté sous

JAVA_TOOL_OPTIONS= - DadditionalJOption= - Xdoclint: none

sur Jenkins job configuration > environnement de construction > injecter des variables d'environnement dans le processus de construction > contenu des propriétés

a résolu mon problème de construction de code par Jenkins Maven: -)

1
répondu snj 2018-02-15 00:46:15

alors, économisez-vous quelques heures que je n'ai pas et essayez ceci si cela ne semble pas fonctionner:

 <additionalJOption>-Xdoclint:none</additionalJOption>

la balise est modifiée pour les versions plus récentes.

1
répondu rawrintheclouds 2018-08-07 14:26:18

je voudrais ajouter un peu de perspicacité dans d'autres réponses

dans mon cas

- Xdoclint: none

n'a pas marché.

commençons par ça, dans mon projet, je n'avais pas vraiment besoin de javadoc. Seuls quelques plugins nécessaires avaient une dépendance de build time.

donc, le moyen le plus simple de résoudre mon problème était:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>
0
répondu mpasko256 2017-10-15 14:05:33

je suis un peu en retard à la fête, mais j'ai été forcé de chercher une solution aussi, j'ai fini ici, et je l'ai trouvé.

voici ce qui marche pour moi: -

export JAVA_TOOL_OPTIONS=-DadditionalJOption=-Xdoclint:none

et ensuite démarrer votre Maven build, toute distribution Linux build, etc. C'est une bonne chose que cela ne nécessite pas de modification de fichiers "Maven config - Je ne pouvais pas le faire car mon objectif était de reconstruire un tas de paquets Centos rpm, j'ai donc dû aller très profond.

0
répondu Mariusz Borsa 2018-02-10 05:07:35

pour ignorer les étiquettes manquantes @param et @return , il suffit de désactiver les étiquettes missing groupe doclint . De cette façon, le javadoc sera vérifié pour les problèmes de niveau et de syntaxe:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>3.0.0</version>
        <configuration>
            <doclint>all,-missing</doclint>
        </configuration>
    </plugin>

notez qu'il s'agit d'un plugin version 3.0 ou plus récente.

0
répondu gjoranv 2018-05-16 14:30:29