I am in the process of evaluating FindBugs and am trying to make use of the excludeFilter so that the tool does not process the test packages or the generated ejb stubs.
I have tried the following:
<FindBugsFilter>
<!-- Match any test packages -->
<Match>
<Package name="~.*\.test"/>
</Match>
<Match>
<Or>
<Class name="~.*\.^_*"/>
<Class name="~.*EJS*"/>
</Or>
<Bug pattern="MALICIOUS_CODE"/>
</Match>
The generated EJB's are still being looked at. Can someone provide some better direction on this.
I want to exclude out all classes that start with "_"
Example:
com/mycompany/business/admin/ejb/_AdminRemoteHome_Stub.java
com/mycompany/business/admin/ejb/_EJSRemoteStatelessAdminHome_054d51b9_Tie.java
Updated filter file.
I change the filter file to the following structure using the suggested regx changes and now things are working as expected:
<FindBugsFilter>
<!-- Match any test packages -->
<Match>
<Package name="~.*\.test"/>
</Match>
<Match>
<Class name="~.*\._.*"/>
</Match>
<Match>
<Class name="~.*?EJS.*"/>
</Match>
Looks like I need to go back and brush up on my regx.
Best Solution
Regarding FindBugFilter,
(just to be sure) are you sure you are considering the compiled class files directories, and not the sourcePath? (as mentioned in this SO answer).
From the Java element name matching section:
Would the following regex be more accurate?
"
.*\._.*
" instead of ".*\.^_*
" because the anchor is supposed to match at the start of the string the regex pattern is applied to."
.*?EJS.*
" instead of ".*EJS*
" because the?
quantifier makes the matching lazy, avoiding to 'eat' EJS. (Plus "S*
" means "0 or n S", which does not help here)