I've got a multiple project setup, using Maven and the Findbugs plugin. I need to exclude some files in one of the child projects, so I added it to findbugs-exclude.xml
. That works when I build in the subproject.
My issue comes when I try to build at top level. Maven is not finding the findbugs-exclude.xml
in the subproject. So it doesn't ignore my errors and fails because of them. I can put my findbugs-exclude.xml
in the top level directory, and the exclusion works. But that's polluting the top level, and would not be looked upon favorably.
Is there a way to get the Maven plugin to use the findbugs-exclude.xml
file from a subdirectory? Preferably with little to no change at the top level?
One solution for this is to create a seperate project which contains the findbugs-excludes.xml and then use the dependency plugin to unpack and place it locally where it's required something like this:
<profile>
<id>static-analysis</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-findbugs</id>
<phase>process-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.myproject</groupId>
<artifactId>my-findbugs</artifactId>
<version>0.1-SNAPSHOT</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>src/main/findbugs/</outputDirectory>
</artifactItem>
</artifactItems>
<!-- other configurations here -->
<excludes>META-INF/</excludes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<configuration>
<xmlOutput>true</xmlOutput>
<!-- Optional directory to put findbugs xdoc xml report -->
<xmlOutputDirectory>target/findbugs</xmlOutputDirectory>
<effort>Max</effort>
<threshold>Low</threshold>
<excludeFilterFile>src/main/findbugs/findbugs-excludes.xml</excludeFilterFile>
</configuration>
<executions>
<execution>
<id>findbugs-run</id>
<phase>compile</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
With this approach you can then share this exclusion file across projects if required which could be a good or a bad thing depending on how you look at it :) Also, thinking about it, if you have a dedicated findbugs project you can create different flavours of exclusions using classifiers and the use a specific classifier depending on the context. It's not perfect but it works for me.
HTH, James