326 votes

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

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 java doc 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 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 @paquets

Reportez-vous à la générées Javadoc fichiers dans /Utilisateurs/sergioc/Documents/espaces de travail/heal/minitoolbox/cible/apidocs' dir.

au 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 de la Java doc pot en une seule étape, car il a été de travailler avec Java 7 ?

401voto

RDX Points 7538

DocLint est une nouvelle fonctionnalité de Java 8, qui est résumé comme suit:

Provide a means to detect errors in Javadoc comments early in the development cycle and in a way that is easily linked back to the source code.

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 indiqué dans ce fil. Vous aurez à ajouter à votre maven configuration:

<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>-Xdoclint:none</additionalparam>
            </configuration>
        </execution>
    </executions>
</plugin>

Edit: Oublié de fermer <configuration> balise

98voto

ankon Points 1576

L'approche la plus simple pour faire fonctionner les choses 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>
 

65voto

ogondza Points 18

Voici la façon la plus concise que je connaisse d'ignorer les avertissements de doclint, quelle que soit la version de Java utilisée:

 <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>
          <configuration>
            <additionalparam>${javadoc.opts}</additionalparam>
          </configuration>
        </execution>
      </executions>
    </plugin>
    ...
  </plugins>
</build>
 

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

31voto

Jakub Skoczen Points 76

Remplacer la configuration maven-javadoc-plugin uniquement, ne résout pas le problème avec mvn site (utilisé par exemple lors de la phase de validation). 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>
 

25voto

Martin Ellis Points 4323

Vous pouvez essayer de définir la propriété failOnError (voir la documentation du plugin ) sur 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 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X