Skip to main content

Findbugs maven plugin configuration


By using findbugs we can avoid some performance issues before deployment.
To use findbugs in project, 2 plugins required. One for execute findbugs check on the code, another for print the report in console or generate html report.

<project>
......
<build>
<plugins>
....
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
                <version>2.3.2</version>
                <inherited>true</inherited>
                <configuration>
<!-- skip findbugs execution set value "true" -->
                    <skip>false</skip>
                    <effort>Max</effort>
                    <threshold>Medium</threshold>
                    <xmlOutput>true</xmlOutput>
                </configuration>
                <executions>
                    <execution>
                        <id>findbugs-check</id>
                        <goals>
                            <goal>check</goal>
                        </goals>
                        <configuration>
<!-- break the build if findbugs has found errors on code -->
                            <failOnError>true</failOnError>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
<!-- this plugin used to print findbugs validation findings in console -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>xml-maven-plugin</artifactId>
                <version>1.0</version>
                <inherited>true</inherited>
                <executions>
                    <execution>
                        <id>echo-findbugs-errors</id>
<!-- this should execute before integration test to print reports -->
                        <phase>post-integration-test</phase>
                        <goals>
                            <goal>transform</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <transformationSets>
                        <transformationSet>
                            <dir>target</dir>
                            <includes>
<!-- this file will be generated while running findbugs check -->
                                <include>findbugs.xml</include>
                            </includes>
<!-- XSL file to convert xml report into text -->
                            <stylesheet>${basedir}/src/main/resources/echo-findbugs-errors.xsl</stylesheet>
                        </transformationSet>
                    </transformationSets>
                </configuration>
                <dependencies>
<!-- Saxon used parse the finbugs report xml file -->
                    <dependency>
                        <groupId>net.sourceforge.saxon</groupId>
                        <artifactId>saxon</artifactId>
                        <version>9.1.0.8</version>
                    </dependency>
                </dependencies>
            </plugin>
...

        </plugins>
....
    </build>
.....
</project>

Findbugs: http://findbugs.sourceforge.net/

Here is the sample XSL for report:

<?xml version="1.0"?>

<xsl:transform version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text" indent="no" omit-xml-declaration="yes"/>

<xsl:template match="/">
<xsl:message>&#xA;</xsl:message>
<xsl:apply-templates select="//BugInstance"/>
<xsl:message>&#xA;</xsl:message>
</xsl:template>

<xsl:template match="BugInstance">
<xsl:message>
<xsl:call-template name="toText"/>
</xsl:message>
</xsl:template>

<xsl:template name="toText">
<xsl:text>FindBugs: </xsl:text>
<xsl:value-of select="@category"/>
<xsl:text>/</xsl:text>
<xsl:value-of select="@type"/>
<xsl:text> </xsl:text>
<xsl:value-of select="../@classname"/>
<xsl:text>[</xsl:text>
<xsl:value-of select="@lineNumber"/>
<xsl:text>] &quot;</xsl:text>
<xsl:value-of select="@message"/>
<xsl:text>&quot;</xsl:text>
</xsl:template>

</xsl:transform>

Comments

Popular posts from this blog

Running and debugging jetty maven plugin in Netbeans

Coding with Netbeans will make developer life simple. We don't need search for plugins and install different plugins from different places. Maven projects can opened as directly in Netbeans without any settings. Here is the way to run & debug using maven jetty plugin. We can't add Jetty server as servers in Netbeans. Run project: Right click on project and open the properties. click on "Actions" on left side. On right side there will be list of available actions.  To run jetty can be created a new action or override default "Run Project" Here I am overriding default one, Because I can run the project just by hitting "F6" key click on "Run Project" Enter the value "Execute Goals" as "jetty:run", If you want run as offline add "jetty:run -o" "Active Profiles" can be empty In "set Properties" field we can set like skip test. Here I am skipping test. Done, After setting y

remove(unset) property in a property file using ANT PropertyFile task

Using PropertyFile task we can edit the property file during ANT build. Edit property value are very easy and can find here details. http://ant.apache.org/manual/Tasks/propertyfile.html but delete a property or comment a property is the tricky one. If we are using latest ant version (1.8.1 or later), we can delete a property like below. <propertyfile file="my.properties" comment="My properties">   < entry  key="propertykey" operation="del"/> < /propertyfile> but the older version that is before 1.8.1 don't have operation called " del ", if we run the command in lower version ant, we will get a error says undefined operation "del".      there is workaround instead deleting a property we can comment that property using ant's replace command. < replace file="sample.properties">                      < replacefilter token="propertykey" value="#propert

Disable hibernate Optimistic Lock for specific scenario

Optimistic Lock gives more control on concurrent modification on data. That can be achieved very easily in hibernate using @Version column. But in some cases we may have to avoid concurrency check, example background process. To disable Optimistic lock set OptimisticLockMode as NONE for entity class while hibernate is initiating. We can't remove version column that needs Database changes and ORM changes. In this way we can disable Optimistic Lock by code. implement "org.hibernate.event.Initializable" interface override the below method.     @Override     public void initialize(Configuration cfg) {         Iterator<?> persistentClassIterator = cfg.getClassMappings();         while (persistentClassIterator.hasNext()) {             PersistentClass persistentClass = PersistentClass.class.cast(persistentClassIterator.next());                     Iterator propertyIterator = persistentClass.getDeclaredPropertyIterator();                    while (proper