texto registro fichero eliminar elimina ejemplos directorio delete datos crear contenido como clase borrar archivos archivo java eclipse suppress-warnings generated-code

registro - file.delete java no elimina



Cómo suprimir las advertencias de Java para directorios o archivos específicos, como el código generado (12)

Estoy usando un generador de analizador que crea un código algo feo. Como resultado, mi proyecto Eclipse tiene varias docenas de advertencias que emanan de los archivos fuente generados. Sé que puedo usar la anotación @SuppressWarning para suprimir advertencias particulares en elementos particulares, pero cualquier anotación que añada a mano se perderá cuando el generador del analizador vuelva a funcionar. ¿Hay alguna manera de configurar Eclipse para suprimir las advertencias de un archivo o directorio en particular?


Comenzando con la versión 3.8 M6, Eclipse (para ser exactos: el JDT) tiene una funcionalidad incorporada para esto. Se puede configurar a través de la ruta de compilación de un proyecto: Propiedades del proyecto> Ruta de compilación de Java> Compilador> Fuente

Anunciado aquí: Eclipse 3.8 y 4.2 M6 - Nuevo y notable , llamado Selectivamente ignorar errores / advertencias de las carpetas de origen . Ahí es también de donde es la captura de pantalla. Esta es la nueva característica desarrollada en el Bug 220928 vinculado anteriormente.


Creo que lo mejor que puedes hacer es habilitar ajustes específicos del proyecto para mostrar advertencias.

Ventana -> Preferencias -> Java -> Compilador -> Errores / Advertencias

En la parte superior del formulario hay un enlace para configurar ajustes específicos del proyecto.


El usuario @Jorn insinuó el código Ant para hacer esto. Esto es lo que tengo

<echo>Adding @SuppressWarnings("all") to ANTLR generated parser/lexer *.java</echo> <echo> in ${project.build.directory}/generated-sources/antlr/</echo> <replace dir="${project.build.directory}/generated-sources/antlr/" summary="true" includes="**/*.java" token="public class" value=''@SuppressWarnings("all") public class'' />

Tenga en cuenta que Ant <replace> reemplaza texto, no reemplaza la expresión regular, por lo que no puede usar el ^ meta-character en el token para hacer coincidir el comienzo de la línea como lo hace el complemento maven regexp replace.

Estoy haciendo esto al mismo tiempo que ejecuto Antlr desde maven-antrun-plugin en mi Maven pom, porque el plugin maven ANTLR no funcionó bien con el plugin Maven de Cobertura.

(Me doy cuenta de que esta no es una respuesta a la pregunta original, pero no puedo formatear el código Ant en un comentario / respuesta a otra respuesta, solo en una respuesta)


En el caso de ANTLR 2, es posible suprimir las advertencias en el código generado appenidng @SuppressWarnings antes de la declaración de clase en el archivo de la gramática, por ejemplo

{@SuppressWarnings("all")} class MyBaseParser extends Parser;


Este pequeño script de python "parchea" los archivos .classpath generados por .classpath y agrega la etiqueta XML requerida a todas las carpetas de origen comenzando con target/generated-sources . Puede ejecutarlo desde la carpeta raíz de su proyecto. Obviamente, debe volver a ejecutarlo cuando la información del proyecto Eclipse se vuelva a generar desde M2E. Y todo bajo su propio riesgo, obviamente ;-)

#!/usr/bin/env python from xml.dom.minidom import parse import glob import os print(''Reading .classpath files...'') for root, dirs, files in os.walk(''.''): for name in files: if (name == ''.classpath''): classpathFile = os.path.join(root, name) print(''Patching file:'' + classpathFile) classpathDOM = parse(classpathFile) classPathEntries = classpathDOM.getElementsByTagName(''classpathentry'') for classPathEntry in classPathEntries: if classPathEntry.attributes["path"].value.startswith(''target/generated-sources''): # ensure that the <attributes> tag exists attributesNode = None; for attributes in classPathEntry.childNodes: if (attributes.nodeName == ''attributes''): attributesNode = attributes if (attributesNode == None): attributesNode = classpathDOM.createElement(''attributes'') classPathEntry.appendChild(attributesNode) # search if the ''ignore_optional_problems'' entry exists hasBeenSet = 0 for node in attributesNode.childNodes: if (node.nodeName == ''attribute'' and node.getAttribute(''name'') == ''ignore_optional_problems''): # it exists, make sure its value is true node.setAttribute(''value'',''true'') #print(node.getAttribute(''name'')) hasBeenSet = 1 if (not(hasBeenSet)): # it does not exist, add it x = classpathDOM.createElement("attribute") x.setAttribute(''name'',''ignore_optional_problems'') x.setAttribute(''value'',''true'') attributesNode.appendChild(x) try: f = open(classpathFile, "w") classpathDOM.writexml(f) print(''Writing file:'' + classpathFile) finally: f.close() print(''Done.'')


Esto se puede hacer excluyendo ciertos directorios de la ruta de compilación (El siguiente ejemplo se da usando Eclipse 3.5)

[1] Abre la ruta de compilación de Java

  • Haga clic en el proyecto en Package Explorer
  • Haga clic derecho, propiedades
  • Seleccione Java Build Path

[2] Agregar directorios para excluir

  • La pestaña Fuente debe contener detalles de las carpetas de origen del proyecto
  • Expanda la carpeta fuente y ubique la propiedad ''Excluido:''
  • Seleccione ''Excluido:'' y haga clic en Editar
  • Agregue carpetas a los patrones de exclusión usando Agregar / Agregar múltiples opciones
  • Haga clic en Finalizar y luego en Aceptar para que Eclipse lo reconstruya.

Estoy haciendo esto a algunas gramáticas ANTLR, que generan un analizador de Java usando Ant. El script de compilación Ant agrega @SuppressWarnings("all") a un archivo Java y @Override a unos pocos métodos en otro. Puedo buscar cómo se hace exactamente, si estás interesado.


Ha pasado un tiempo desde que lancé el complemento de limpieza de advertencia, y ahora que estoy usando Eclipse 3.8, ya no lo necesito. Sin embargo, para aquellos que todavía necesitan este complemento, lo he lanzado en github con el sitio de actualización en bintray. Si todavía está utilizando Eclipse 3.7 o anterior, esto podría ser útil. Verifique este sitio para detalles de instalación.


Hay un ticket para esto, Bug 220928 , que desde entonces se completó para Eclipse 3.8. Por favor, mira esta respuesta para más detalles.

Si está atrapado con Eclipse 3.7 o inferior: el usuario "Marc" que comenta el ticket creó (o al menos enlaza con) un complemento llamado "warningcleaner" en el comentario 35 . Estoy usando eso con mucho éxito mientras espero que esta característica se integre en Eclipse.

Es realmente bastante simple:

  1. Instalar complemento.
  2. Haga clic derecho en el proyecto y seleccione "Agregar / eliminar la naturaleza del código generado".
  3. Abra la configuración del proyecto (haga clic derecho y seleccione "propiedades").
  4. Abra la pestaña ''Advertencia más limpia''.
  5. Seleccione las carpetas de origen de las que desea ignorar las advertencias.

Lo resolví usando el complemento maven regexp replace; no resuelve la causa, pero cura el dolor:

<plugin> <groupId>com.google.code.maven-replacer-plugin</groupId> <artifactId>maven-replacer-plugin</artifactId> <version>1.3.2</version> <executions> <execution> <phase>prepare-package</phase> <goals> <goal>replace</goal> </goals> </execution> </executions> <configuration> <includes> <include>target/generated-sources/antlr/**/*.java</include> </includes> <regex>true</regex> <regexFlags> <regexFlag>MULTILINE</regexFlag> </regexFlags> <replacements> <replacement> <token>^public class</token> <value>@SuppressWarnings("all") public class</value> </replacement> </replacements> </configuration> </plugin>

Tenga en cuenta que no logré que la notación ** funcione, por lo que es posible que deba especificar la ruta exactamente.

Vea el comentario a continuación para una mejora sobre cómo no generar duplicados @SupressWarnings


No creo que Eclipse ofrezca inherentemente una forma de hacerlo a nivel de directorio (pero no estoy seguro).

Puede hacer que los archivos generados vayan a un proyecto separado de Java y controlar las advertencias para ese proyecto específico.

Por lo general, prefiero colocar el código generado automáticamente en un proyecto separado de todos modos.


Solo puede suprimir advertencias a nivel de proyecto. Sin embargo, puede configurar su pestaña de problemas para suprimir advertencias de archivos o paquetes. Vaya al menú Configurar contenido y trabaje con el alcance "En el conjunto de trabajo:".