Maven no está trabajando en Java 8 cuando las tags Javadoc están incompletas

Desde que uso Maven, he podido construir e instalar en mis proyectos de repository locales que tienen tags Javadoc incompletas (por ejemplo, un parámetro faltante).

Sin embargo, desde que migré a Java 8 (1.8.0-ea-b90), Maven es absolutamente estricto con las tags de documentación faltantes y me muestra muchos errores de Javadoc relacionados con problemas de Javadoc cuando bash construir o instalar un proyecto donde Javadoc no está “Perfecto”. Algunos de los proyectos que bash comstackr e instalar en mi repository local 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:

  org.apache.maven.plugins maven-javadoc-plugin 2.9   attach-javadocs  jar     

Como dije antes, todo está funcionando bien si vuelvo a Java 7. ¿Quizás esto 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 repository local) con Java 8? He probado con Maven 3.0.3 y 3.0.5 en OSX.

ACTUALIZAR:

Si cambio la configuración de mi complemento Javadoc con false (gracias Martin):

  org.apache.maven.plugins maven-javadoc-plugin 2.9   attach-javadocs  jar     

Entonces el proyecto se instala en mi repository local. Sin embargo, Javadoc JAR aún no se genera.

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

[ERROR] MavenReportException: Error al crear el archivo: Código de salida: 1 – /Users/….ja::18: advertencia: no @param … La línea de comando fue: / Library / Java / Home / bin / javadoc @options @paquetes

Consulte los archivos Javadoc generados en el directorio ‘/ Users / sergioc / Documents / workspaces / heal / minitoolbox / target / apidocs’.

en org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeJavadocCommandLine (AbstractJavadocMojo.java:5043) en org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeReport (AbstractJavadocMojo.java:1990) en org.apache.maven.plugin .javadoc.JavadocJar.execute (JavadocJar.java:181) en org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:101) en org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java : 209) en org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:153) en org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:145) en org.apache. maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:84) en org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:59) en org.apache.maven.lifecycle.internal.LifecycleStarter. singleThreadedBuild (LifecycleStarter.java:183) en org.apache.maven.lifecycle.internal.Lifecyc leStarter.execute (LifecycleStarter.java:161) en org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:320) en org.apache.maven.DefaultMaven.execute (DefaultMaven.java:156) en org.apache.maven .cli.MavenCli.execute (MavenCli.java:537) en org.apache.maven.cli.MavenCli.doMain (MavenCli.java:196) en org.apache.maven.cli.MavenCli.main (MavenCli.java:141 ) en sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) en sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) en sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) en java.lang.reflect. Method.invoke (Method.java:491) en org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:290) en org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java: 230) en org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:409) en org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:352)

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

La mejor solución sería corregir los errores de javadoc. Si por algún motivo 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:

Proporcione un medio para detectar errores en los comentarios de Javadoc al principio del ciclo de desarrollo y de una manera que se relacione fácilmente con el código fuente.

Esto está habilitado por defecto, y ejecutará una gran cantidad de comprobaciones antes de generar Javadocs. Debe desactivar esto para Java 8 como se especifica en este hilo . Tendrás que agregar esto a tu configuración de maven:

   java8-doclint-disabled  [1.8,)   -Xdoclint:none       org.apache.maven.plugins maven-javadoc-plugin 2.9   attach-javadocs  jar   ${javadoc.opts}      org.apache.maven.plugins maven-site-plugin 3.3    org.apache.maven.plugins maven-javadoc-plugin  ${javadoc.opts}        

El enfoque más sencillo para hacer que las cosas funcionen tanto con java 8 como con java 7 es usar un perfil en la comstackción:

   doclint-java8-disable  [1.8,)     org.apache.maven.plugins maven-javadoc-plugin  -Xdoclint:none       

Esta es la forma más concisa de la que soy consciente para ignorar las advertencias de doclint independientemente de la versión de Java utilizada. No es necesario duplicar la configuración del complemento en varios perfiles con ligeras modificaciones.

   doclint-java8-disable  [1.8,)   -Xdoclint:none       org.apache.maven.plugins maven-javadoc-plugin 2.9.1   attach-javadocs   ${javadoc.opts}     ...   

Probado en Oracle / jdk abierto 6, 7 y 8.

Agregar a la sección de propiedades globales en el archivo pom:

  ...  -Xdoclint:none  

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

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

   disable-java8-doclint  [1.8,)   -Xdoclint:none    

Solo agrégalo a tu POM y listo.

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


Para los usuarios de maven-javadoc-plugin 3.0.0:

Reemplazar

-Xdoclint:none

por

none

Sobrescribir la configuración de maven-javadoc-plugin solamente, no soluciona el problema con el mvn site (utilizado, por ejemplo, durante la etapa de lanzamiento). Esto es lo que tuve que hacer:

  doclint-java8-disable  [1.8,)     org.apache.maven.plugins maven-javadoc-plugin  -Xdoclint:none    org.apache.maven.plugins maven-site-plugin 3.3    org.apache.maven.plugins maven-javadoc-plugin  -Xdoclint:none         

No creo que simplemente 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 comstackción es solucionar el problema subyacente . Sí, en última instancia, tendrá que corregir esos archivos de código fuente.

Estas son las cosas a las que debe prestar atención con las que previamente podría salirse con la suya:

  • HTML mal formado (por ejemplo, una etiqueta final faltante, corchetes no escapados, etc.)
  • Inválido {@link } s. (Lo mismo ocurre con tags similares como @see )
  • Valores de @author no @author . Esto solía ser aceptado: @author John pero ya no es así debido a los corchetes no escapados.
  • Las tablas HTML en Javadoc ahora requieren un resumen o título. Vea esta pregunta para una explicación.

Simplemente tendrá que arreglar sus archivos de código fuente y seguir construyendo su Javadoc hasta que pueda comstackr sin fallar. Es engorroso, sí, pero personalmente me gusta cuando llevo mis proyectos al nivel de 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 haya preparado sus propias herramientas para el cumplimiento de JDK8 antes de lanzar JDK8. Parece que no se solucionará hasta Java 9 . Solo en este caso particular, sugiero desactivar DocLint como está documentado en otra parte de esta página.

Puede intentar establecer la propiedad failOnError (ver la documentación del complemento ) en false :

  org.apache.maven.plugins maven-javadoc-plugin 2.9   attach-javadocs  jar   false     

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

Como depende de la versión de su JRE que se utiliza para ejecutar el comando maven, no desea deshabilitar DocLint por defecto en su pom.xml

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

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

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á. Entonces tenemos que modificarlo como abajo.

   org.apache.maven.plugins maven-javadoc-plugin 3.0.0  none   

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

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

bin / mkdistro.sh -DskipTests -Dmaven.javadoc.opts = ‘- Xdoclint: -html’

A partir de maven-javadoc-plugin 3.0.0, debería haber estado usando additionalOption para establecer una opción adicional de Javadoc, por lo que si desea que Javadoc desactive doclint, debe agregar la siguiente propiedad.

  ... -Xdoclint:none ...  

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

  org.apache.maven.plugins maven-javadoc-plugin 3.0.0  

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

En mi caso

-Xdoclint: ninguno

No funcionó

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

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

  org.apache.maven.plugins maven-javadoc-plugin  true   

Llego un poco tarde a la fiesta, pero me vi obligado a buscar soluciones también, terminé aquí y luego lo encontré.

Esto es lo que funciona para mí:

 export JAVA_TOOL_OPTIONS=-DadditionalJOption=-Xdoclint:none 

Y luego inicie su comstackción Maven, cualquier distribución de distribución de Linux, etc. Lo bueno de esto es que no requiere la modificación de los archivos de configuración de Maven. No pude hacer eso ya que mi objective era reconstruir un montón de paquetes de Centos rpm, así que tuve que vete muy profundo

Agregado abajo

JAVA_TOOL_OPTIONS = -DadditionalJOption = -Xdoclint: none

en la configuración de trabajo de Jenkins> Entorno de comstackción> Inyectar variables de entorno en el proceso de comstackción> Contenido de las propiedades

Resolvió mi problema de construcción de código a través de Jenkins Maven 🙂

Para ignorar las tags @param y @return faltantes, es suficiente para deshabilitar el grupo doclint missing . De esta forma, javadoc seguirá siendo revisado para detectar problemas de syntax y nivel superior:

   org.apache.maven.plugins maven-javadoc-plugin 3.0.0  all,-missing   

Tenga en cuenta que esto es para la versión 3.0 o posterior del complemento.

Entonces, ahórrese algunas horas que no tuve y pruebe esto si parece que no funciona:

  -Xdoclint:none 

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