2009-03-06 12 views
10

Estoy atascado con una base de código Java heredada que tiene MILES de advertencias cuando la compila. Me encantaría solucionar el origen de todas estas advertencias, pero desafortunadamente esa no es una opción en este momento en mi compañía (otras cosas como "hacer nuevos productos que generen ingresos" son consideradas de mayor prioridad por las personas a cargo; .¿Cómo puedo suprimir las advertencias (en toda la base de código) durante la compilación javadoc?

Ahora, podría vivir con todas estas advertencias, si no fuera por el hecho de que hacen que sea difícil encontrar errores reales en la salida de nuestro servidor de compilación continua. El servidor de compilación solo usa una llamada ant, nada sofisticado, pero hasta ahora no he podido encontrar nada en ninguna parte sobre cómo puedo modificar esta llamada para evitar el resultado de advertencia.

Pasar por el código y agregar una anotación @SuppressWarnings en todas partes funcionaría, pero también sería casi tan doloroso como revisar todas las fuentes de las advertencias. Así que lo que realmente me gustaría es que si sólo había alguna manera de que pudiera hacer:

<javadoc suppressWarrnings="true" 

o algo similar, para que el compilador no javadoc salida de todos los mensajes de advertencia. ¿Es posible algo como esto (desactivación de advertencia javadoc global)?

Respuesta

5

Tanto la herramienta ant y la herramienta javadoc en sí no tienen forma de desactivar las advertencias de forma global.

Una solución posible que se me ocurre es ejecutar la tarea javadoc como una llamada independiente del resto de la compilación. Puede usar el argumento -logfile para redirigir el resultado a un archivo de registro en lugar de a la consola.

6

Pruebe la opción -quiet.

+0

Pregunta estúpida: ¿sabes cómo pasar esta bandera en ¿hormiga? – machineghost

+0

Creo que con additionalparam – anon

+0

Trate de esta manera: < javadoc // otros elementos additionalparam = "-quiet" /> – anon

1

La respuesta de Mark me suena bien, y probablemente funcionaría muy bien para cualquiera que no use el sistema de construcción continua Cruise Control. Sin embargo, descubrí que para cualquiera que (como yo) esté usando ese sistema, hay otra forma.

El control de crucero ensambla sus informes utilizando varias hojas de estilo XSLT. En nuestro caso, estas hojas de estilo residían en:

~/applications/cruisecontrol-bin-2.7.3/webapps/cruisecontrol/xsl 

pero ya no lo hice configuración de nuestra instalación, no sé si eso es una ruta estándar o no. De todos modos, debería poder encontrar un directorio equivalente en su instalación. Dentro de ese directorio hay un archivo llamado errors.xsl. Para deshacerse de las advertencias, deberá realizar dos cambios en ese archivo, que implican comentar las reglas existentes.

Reemplazar:

<xsl:variable name="total.errorMessage.count" select="count($warn.messages) + count($error.messages)"/> 

con:

<!--  <xsl:variable name="total.errorMessage.count" select="count($warn.messages) + count($error.messages)"/>--> 
<xsl:variable name="total.errorMessage.count" select="count($error.messages)"/> 

Esto hará que la "cuenta de errores" sea un recuento de los errores reales, en lugar de un recuento de los errores + advertencias.

A continuación, reemplace:

<xsl:template match="message[@priority='warn']" mode="errors"> 
    <xsl:if test="not(starts-with(text(),'cvs update'))"> 
     <xsl:value-of select="text()"/><br class="none"/> 
    </xsl:if> 
</xsl:template> 

con:

<!--<xsl:template match="message[@priority='warn']" mode="errors"> 
    <xsl:if test="not(starts-with(text(),'cvs update'))"> 
     <xsl:value-of select="text()"/><br class="none"/> 
    </xsl:if> 
</xsl:template>--> 

Esto ocultará las advertencias reales en sí.Alternativamente, siempre puedes simplemente borrar el código comentado, pero entonces debes hacer una copia de seguridad del archivo primero, en caso de que alguna vez quieras recuperar tus advertencias. Además, XSLT ignora cualquier marcado que no sea XSLT, por lo que podría hacer otras cosas con las advertencias además de eliminarlas por completo: por ejemplo, podría envolver todas las advertencias en un DIV, y luego usar CSS/Javascript para "colapsar" las advertencias en lugar de eliminarlos por completo

Aunque finalmente tuve que descubrir esta solución yo mismo, todas las respuestas aquí me ayudaron a entender lo que estaba pasando, así que gracias a todos por la ayuda.

0

Acabo de descubrir que había una variante ligeramente mejor de lo que describí en mi respuesta anterior. En lugar de editar errors.xsl, edite buildresults.xsl. Este archivo contiene un comentario:

for traditional cc display of only compile errors and warnings 
comment out mode="errors" and uncomment mode="compile" and mode="javadoc" 

Si sigue el consejo de que el comentario (comentario las dos líneas que menciona y elimine la línea uno menciona) se obtiene el mismo efecto, pero con errores de compilación incluidos.

¿Por qué molestarse con este método sobre el anterior? Bueno, creo (realmente debería haber probado esto mejor, pero me volví perezoso) que mi método anterior come errores de compilación; este método los preserva.

8

En Java 8 puede agregar additionalparam="-Xdoclint:none" a la tarea javadoc. (Source)

+0

Todavía veo advertencias cuando hago esto, pero es mucho mejor que ver 99 advertencias que yo (también) no tengo tiempo para arreglar. –

1

En la actualidad, algunas opciones no estándar de javadoc le permiten evitar un número excesivo de errores y/o advertencias. Compruebe la ayuda de javadoc (ejecute javadoc -X); las siguientes opciones no estándar deben estar disponibles:

-Xmaxerrs <number> 
-Xmaxwarns <number>    
-Xdoclint:(all|none|[-]<group>) 

-Xmaxerrs establece el número máximo de errores para imprimir -Xmaxwarns establece el número máximo de advertencias para imprimir -Xdoclint activa o desactiva los controles específicos para los problemas de los comentarios Javadoc.

Por ejemplo, especificar -Xdoclint:none deshabilitará comprobaciones específicas para la mayoría de los problemas en los comentarios de javadoc; y -Xmaxwarns 1 limitará el número de advertencias a 1 (intenté -Xmaxwarns 0, pero luego imprimí todas las advertencias, así que supongo que 0 significa sin límite)

Cuestiones relacionadas