2009-07-02 10 views
7

Estoy en el proceso de evaluar FindBugs y estoy tratando de utilizar el excludeFilter para que la herramienta no procese los paquetes de prueba o los talones ejb generados.Problemas con los FindBugs excluye el filtro

he intentado lo siguiente:

<FindBugsFilter> 
<!-- Match any test packages --> 
<Match> 
    <Package name="~.*\.test"/> 
</Match> 
<Match> 
    <Or> 
     <Class name="~.*\.^_*"/> 
     <Class name="~.*EJS*"/> 
    </Or> 
    <Bug pattern="MALICIOUS_CODE"/> 
</Match> 

Los EJB generados todavía se están estudiando. ¿Alguien puede proporcionar una mejor dirección en esto?

quiero excluir a cabo todas las clases que comienzan con "_"

Ejemplo:

com/miempresa/negocio/admin/EJB/_AdminRemoteHome_Stub.java

com/miempresa/negocio/admin/ejb/_EJSRemoteStatelessAdminHome_054d51b9_Tie.java

Archivo de filtro actualizado.

puedo cambiar el archivo de filtro a la siguiente estructura usando los cambios regx sugeridas y ahora las cosas están funcionando como se esperaba:

<FindBugsFilter> 
<!-- Match any test packages --> 
<Match> 
    <Package name="~.*\.test"/> 
</Match> 
<Match> 
    <Class name="~.*\._.*"/> 
</Match> 
<Match> 
    <Class name="~.*?EJS.*"/>  
</Match> 

Parece que tengo que volver atrás y poner al día mi regx.

+0

¿Las clases de EJS siguen apareciendo? ¿Solo tienes el problema para las clases '_' ahora? – VonC

Respuesta

7

En cuanto FindBugFilter,

(sólo para estar seguro) ¿está seguro de que su están considerando los archivos de clase compilados directoriesa, y no el SourcePath? (como se menciona en este SO answer).

Desde la sección Java element name matching:

Si el atributo de nombre de clase, método o campo comienza con el carácter ~ el resto del contenido de los atributos se interpreta como una expresión regular Java que se compara con los nombres del elemento de Java en cuestión.

¿Sería la siguiente expresión regular más precisa?

<Class name="~.*\._.*"/> 
    <Class name="~.*?EJS.*"/> 
  • ".*\._.*" en lugar de ".*\.^_*" porque el anchor se supone que coincida con el inicio de la cadena del patrón de expresión se aplica a.

  • ".*?EJS.*" en lugar de ".*EJS*" porque el ?quantifier hace que el juego perezoso, evitando a 'comer' EJS. (Plus "S*" significa "0 on S", lo que no ayuda aquí)

+0

Acabo de utilizar su sugerencia, pero las clases todavía se muestran en el informe. – boyd4715

+0

Esto es lo que el informe está generando: com/miempresa/negocio/admin/EJB/_AdminRemoteHome_Stub.java Línea 33 \t MALICIOUS_CODE \t puede exponer representación interna mediante la devolución de referencia a objeto mutable – boyd4715

+1

tengo el mismo problema, que incluso no excluye: HaveAGuess

1

Mis findbugs excluyen archivo no estaba funcionando como antes. Estoy usando findbugs-maven-plugin v3.0.0. Para resolver el problema, ejecuté una compilación que generó findbugsXml.xml, luego emitido:

mvn findbugs:gui 

Esto inicia la interfaz de usuario para encontrar los errores. Luego cargué el archivo findbugsXml.xml, navegué a las advertencias que deseaba excluir, las excluí y luego guardé las exclusiones para findbugs_exclude.xml. He añadido esto a que el plugin Maven como

<excludeFilterFile>findbugs_exclude.xml</excludeFilterFile> 

funciona el archivo generado y las exclusiones son verdaderamente se omite en el informe findbugs.

Otro gran consejo que encontré para el plugin de Maven era añadir:

<omitVisitors>UnreadFields</omitVisitors> 
0

Es útil mencionar que si se supone una clase de ser excluido, tenga cuidado con sus clases internas. Me tomó horas para descubrir que en lugar de

<Match> 
    <Class name="com.some.Proto" /> <!--or com.some.Proto$.*--> 
</Match> 

que debe utilizar la siguiente configuración con sus clases internas enumerados uno por uno

<Match> 
    <Or> 
    <Class name="com.some.Proto$Event" /> 
    <Class name="com.some.Proto$Msg" /> 
    <Class name="com.some.Proto$Query" /> 
    </Or> 
</Match> 

Y hasta ahora no he encontrado la manera de excluir una clase y toda su subclase (no es una pista en filter), una simple expresión regular como com.some.Proto$.* simplemente no funciona. Y también noté que $ en expresiones regulares significa el final de la línea, mientras que findbugs lo leen como un carácter de texto, de lo contrario debería haber sido com.some.Proto\$Query. Además, un valioso regex tester me ayudó en Regex al explicar cada personaje en él.

Cuestiones relacionadas