Maven no funciona en Java 8 cuando las etiquetas Javadoc están incompletas


Desde que uso Maven he sido capaz de compilar e instalar en mi repositorio local proyectos que tienen etiquetas Javadoc incompletas (por ejemplo, un parámetro que falta).

Sin embargo, desde que migré a Java 8 (1.8.0-ea-b90) Maven es absolutamente estricto con las etiquetas de documentación faltantes y me muestra muchos errores de Javadoc relacionados con problemas de Javadoc cuando intento construir o instalar un proyecto donde el Javadoc no es "perfecto". Algunos de los proyectos que estoy tratando de compilar e instalar en mi local los repositorios son proyectos de terceros de los que no tengo control. Así que la solución de simplemente arreglar todos los Javadocs en todos estos proyectos no parece ser factible en mi escenario.

Esta es una pequeña parte de la salida que veo cuando ejecuto mvn clean package install en mi proyecto:

[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] ^

El plugin Javadoc Maven está configurado así en mi 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 he dicho antes, todo está funcionando bien si vuelvo a Java 7. Tal vez es un error relacionado con Maven corriendo en Java 8? ¿Cómo podría hacer que funcione (es decir, poder construir el Javadoc del proyecto e instalar su código en mi repositorio local) con Java 8? He probado con Maven 3.0.3 y 3.0.5 en OSX.

ACTUALIZACIÓN:

Si cambio la configuración de mi plugin Javadoc con <failOnError>false</failOnError> (gracias 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>

Entonces el proyecto se instala en mi repositorio local. Sin embargo, el JARRO de Javadoc todavía no se genera.

Un fragmento de la salida que veo en la consola con este la nueva configuración es:

[ERROR] MavenReportException: Error al crear el archivo: Exit código: 1 - /Users/....java: 18: advertencia: no @param ... Línea de comandos era: / Library/Java/Home/bin / javadoc @options @packages

Consulte los archivos Javadoc generados en '/Users/sergioc/Documents/workspaces/heal/minitoolbox/target / apidocs' dir.

At org.apache.maven.complemento.javadoc.AbstractJavadocMojo.executeJavadocCommandLine (AbstractJavadocMojo.java:5043) en org.apache.maven.complemento.javadoc.AbstractJavadocMojo.executeReport (AbstractJavadocMojo.java:1990) en org.apache.maven.complemento.javadoc.JavadocJar.ejecutar(JavadocJar.java:181) en org.apache.maven.complemento.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:101) en org.apache.maven.Lifecycle.interno.MojoExecutor.ejecutar(MojoExecutor.java:209) en org.apache.maven.Lifecycle.interno.MojoExecutor.ejecutar(MojoExecutor.java:153) en org.apache.maven.Lifecycle.interno.MojoExecutor.ejecutar(MojoExecutor.java:145) en org.apache.maven.Lifecycle.interno.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:84) en org.apache.maven.Lifecycle.interno.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java: 59) en org.apache.maven.Lifecycle.interno.LifecycleStarter (en inglés).singleThreadedBuild (LifecycleStarter.java:183) en org.apache.maven.Lifecycle.interno.LifecycleStarter (en inglés).ejecutar(LifecycleStarter.java:161) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:320) at org.apache.maven.DefaultMaven.ejecutar(DefaultMaven.java:156) at org.apache.maven.cli.MavenCli.ejecutar(MavenCli.java:537) at org.apache.maven.cli.MavenCli.dominio(MavenCli.java: 196) at org.apache.maven.cli.MavenCli.main (MavenCli.java:141) at sol.reflejar.NativeMethodAccessorImpl.invoke0 (Método Nativo) en sol.reflejar.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) en sol.reflejar.Delegando el método de acceso o IMPL.invoke (DelegatingMethodAccessorImpl.java: 43) en java.lang.reflejar.Método.invoke(Método.java:491) at org.codehaus.plexo.classworlds.lanzador.Lanzador.launchEnhanced(Lanzador.java:290) en org.codehaus.plexo.classworlds.lanzador.Lanzador.launch (Launcher.java:230) en org.codehaus.plexo.classworlds.lanzador.Lanzador.mainWithExitCode (Launcher.java: 409) en org.codehaus.plexo.classworlds.lanzador.Lanzador.main (Launcher.java:352)

¿Alguna solución alternativa sobre cómo construir las fuentes, instalar el proyecto y generar el JAR de Javadoc en un solo paso, ya que estaba trabajando con Java 7?

Author: dur, 2013-04-08

17 answers

La mejor solución sería corregir los errores de javadoc. Si por alguna razón no es posible (es decir: código fuente generado automáticamente), puede desactivar esta comprobación.

DocLint es una nueva característica en Java 8 , que se resume como:

Proporcionar un medio para detectar errores en los comentarios de Javadoc al principio del desarrollo y de una manera que se vincule fácilmente a la código.

Esto está habilitado por defecto, y ejecutará un montón de comprobaciones antes de generar Javadocs. Necesitas desactivar esto para Java 8 como se especifica en este hilo. Tendrás que añadir esto a tu configuración 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>

Para maven-javadoc-plugin 3.0.x: Reemplazar

<additionalparam>-Xdoclint:none</additionalparam>

Con

<doclint>none</doclint>
 331
Author: Subhas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-05 19:25:57

El enfoque más fácil para hacer que las cosas funcionen con java 8 y java 7 es usar un perfil en la compilación:

<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
Author: ankon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-15 13:21:06

Esta es la forma más concisa que conozco de ignorar las advertencias de doclint independientemente de la versión de Java utilizada. No hay necesidad de duplicar la configuración del plugin en múltiples perfiles con ligeras modificaciones.

<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>

Probado en oracle/open jdk 6, 7 y 8.

 55
Author: Oliver Gondža,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-07 07:36:02

Añada en la sección propiedades globales del archivo pom:

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

La solución común proporcionada aquí en las otras respuestas (agregando esa propiedad en la sección plugins) no funcionó por alguna razón. Solo configurándolo globalmente pude construir el jar de javadoc con éxito.

 36
Author: zapp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-16 09:44:13

La solución más corta que funcionará con cualquier versión de Java:

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

Solo agrega eso a tu POM y estarás listo.

Esto es básicamente la respuesta de@ankon más La respuesta de@zapp.


Para los usuarios de maven-javadoc-plugin 3.0.0:

Sustitúyase

<additionalparam>-Xdoclint:none</additionalparam>

Por

<doclint>none</doclint>

 32
Author: Thiago Porciúncula,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-26 11:42:54

Overriding maven-javadoc-plugin configuration only, no soluciona el problema con mvn site (usado por ejemplo durante la etapa de lanzamiento). Esto es lo que tenía que hacer:

<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
Author: Jakub Skoczen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-10 07:15:30

No creo que apagar DocLint sea una buena solución, al menos no a largo plazo. Es bueno que Javadoc se haya vuelto un poco más estricto, por lo que la forma correcta de solucionar el problema de compilación es arreglar el problema subyacente. Sí, en última instancia, tendrá que arreglar esos archivos de código fuente.

Aquí están las cosas a tener en cuenta que anteriormente podría salirse con la suya:

  • HTML mal formado (por ejemplo, una etiqueta final faltante, corchetes sin escape, etc.)
  • No válido {@link } s. (lo mismo ocurre con etiquetas similares como @see)
  • Valores no válidos @author. Esto solía ser aceptado : @author John <[email protected]> pero ya no es así debido a los corchetes no escapados.
  • Las tablas HTML en Javadoc ahora requieren un resumen o leyenda. Ver esta pregunta para la explicación.

Simplemente tendrás que arreglar tus archivos de código fuente y seguir compilando tu Javadoc hasta que pueda compilarse sin errores. Engorroso sí, pero personalmente me gusta cuando he traído mis proyectos hasta Nivel DocLint porque significa que puedo estar más seguro de que el Javadoc que produzco es realmente lo que pretendo.

Por supuesto, existe el problema si está generando Javadoc en algún código fuente que no haya producido usted mismo, por ejemplo, porque proviene de algún generador de código, por ejemplo, wsimport. Es extraño que Oracle no preparara sus propias herramientas para el cumplimiento de JDK8 antes de lanzar JDK8. Parece que no se arreglará hasta Java 9. Sólo en este caso particular I sugiera desactivar DocLint como se documenta en otra parte de esta página.

 26
Author: peterh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:29

Puede intentar establecer la propiedad failOnError (consulte la documentación del complemento ) a 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>

Como puede ver en los documentos, el valor predeterminado es true.

 18
Author: Martin Ellis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-22 20:07:53

Dado que depende de la versión de su JRE que se utiliza para ejecutar el comando maven, probablemente no desee desactivar DocLint por defecto en su pom.xml

Por lo tanto, desde la línea de comandos se puede utilizar el interruptor -Dadditionalparam=-Xdoclint:none.

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

 17
Author: My-Name-Is,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-03 15:36:39

El nombre de la propiedad de configuración se ha cambiado en la última versión de maven-javadoc-plugin que es 3.0.0.

Por lo tanto el no funcionará. Así que tenemos que modificarlo como se muestra a continuación.

   <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>3.0.0</version>
      <configuration>
         <doclint>none</doclint>
      </configuration>
  </plugin>
 7
Author: Balachandar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-20 21:50:01

A partir de maven-javadoc-plugin 3.0.0 deberías haber estado usando additionalJOption para establecer una opción Javadoc adicional, por lo que si deseas que Javadoc deshabilite doclint, deberías agregar la siguiente propiedad.

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

También debe mencionar la versión de maven-javadoc-plugin como 3.0.0 o superior.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>3.0.0</version>    
</plugin>
 2
Author: amanzoor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-31 14:54:46

No estoy seguro de si esto va a ayudar, pero incluso me enfrenté al mismo problema muy recientemente con oozie-4.2.0 versión. Después de leer las respuestas anteriores, acabo de agregar la opción maven a través de la línea de comandos y funcionó para mí. Por lo tanto, sólo compartir aquí.

Estoy usando java 1.8.0_77, no he probado con java 1.7

Bin/mkdistro.sh -DskipTests - Dmaven.javadoc.opts=' - Xdoclint: - html'

 1
Author: Raghu Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-03 02:58:50

Añadido a continuación

JAVA_TOOL_OPTIONS= - DadditionalJOption= - Xdoclint: none

En Jenkins job configuración > Entorno de compilación > Inyectar variables de entorno al proceso de compilación > Contenido de propiedades

Resuelto mi problema de la construcción de código a través de Jenkins Maven: -)

 1
Author: snj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-15 00:46:15

Así que, ahórrate algunas horas que no hice y prueba esto si parece que no funciona:

 <additionalJOption>-Xdoclint:none</additionalJOption>

La etiqueta se cambia para las versiones más recientes.

 1
Author: rawrintheclouds,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-07 14:26:18

Me gustaría añadir algo de información sobre otras respuestas

En mi caso

- Xdoclint: none

No funcionó.

Comencemos con eso, en mi proyecto, realmente no necesitaba javadoc en absoluto. Solo algunos plugins necesarios tenían una dependencia de tiempo de construcción en él.

Entonces, la forma más sencilla de resolver mi problema fue:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>
 0
Author: mpasko256,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-15 14:05:33

Llego un poco tarde a la fiesta, pero también me vi obligado a buscar una solución alternativa, terminé aquí y luego la encontré.

Esto es lo que funciona para mí: -

export JAVA_TOOL_OPTIONS=-DadditionalJOption=-Xdoclint:none

Y luego inicie su compilación Maven, cualquier compilación de distribución de Linux, etc. Lo bueno de esto es que no requiere la modificación de archivos Maven config - no pude hacerlo ya que mi objetivo era reconstruir un montón de paquetes rpm Centos, así que tuve que ir muy profundo.

 0
Author: Mariusz Borsa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-10 05:07:35

Para ignorar las etiquetas faltantes @param y @return, basta con desactivar missing doclint group . De esta manera, el javadoc todavía se revisará para problemas de nivel superior y sintaxis:

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

Tenga en cuenta que esto es para plugin versión 3.0 o más reciente.

 0
Author: gjoranv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-16 14:30:29