Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

cobertura-maven-plugin conflicts with FindBugs

After updating cobertura-maven-plugin from 2.6 to 2.7 Cobertura plugin conflicts with FindBugs plugin. FindBugs plugin detects error in cobertura-instrumented code:

[INFO] Incorrect lazy initialization of static field pl.chilldev.sites.commons.ErrorCode.__cobertura_counters in pl.chilldev.sites.commons.ErrorCode.__cobertura_init() [pl.chilldev.sites.commons.ErrorCode] In ErrorCode.java

(everything works fine when Cobertura plugin verison is set to 2.6)

Just in case, FindBugs plugin version is 3.0.1.

Is it possible to set these plugins somehow to work together?

Edit 1 (pom.xml)

This is pom.xml of main project directory (sub-modules contain only dependencies list):

<?xml version="1.0" encoding="utf-8"?>
<!--
# This file is part of the pl.chilldev.sites.
#
# @copyright 2015 © by Rafał Wrzeszcz - Wrzasq.pl.
-->
<project
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd
">
    <modelVersion>4.0.0</modelVersion>

    <!-- core project settings -->
    <groupId>pl.chilldev.sites</groupId>
    <artifactId>sites</artifactId>
    <packaging>pom</packaging>
    <version>0.0.1-SNAPSHOT</version>

    <!-- project meta info -->
    <name>ChillDev-Sites</name>
    <url><!-- TODO --></url>
    <description>Content sites storage service.</description>
    <inceptionYear>2015</inceptionYear>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <organization>
        <name>Rafał Wrzeszcz - Wrzasq.pl</name>
        <url>http://wrzasq.pl/</url>
    </organization>

    <!-- plugins configuration -->
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.6</version>
                    <configuration>
                        <archive>
                            <index>true</index>
                            <manifest>
                                <addClasspath>true</addClasspath>
                            </manifest>
                            <manifestEntries>
                                <url>${project.url}</url>
                                <Specification-Title>${project.name}</Specification-Title>
                                <Specification-Version>${project.version}</Specification-Version>
                                <Specification-Vendor>Rafał Wrzeszcz - Wrzasq.pl; Chillout Development</Specification-Vendor>
                                <Implementation-Title>${project.name}</Implementation-Title>
                                <Implementation-Version>${project.version}</Implementation-Version>
                                <Implementation-Vendor>Rafał Wrzeszcz - Wrzasq.pl; Chillout Development</Implementation-Vendor>
                            </manifestEntries>
                        </archive>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <compilerArgs>
                        <arg>-Xlint:all</arg>
                    </compilerArgs>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.7</version>
                <configuration>
                    <escapeString>\</escapeString>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>resources</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <version>3.4</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>check</goal>
                            <goal>cpd-check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>2.15</version>
                <dependencies>
                    <!-- Maven Checkstyle plugin has a 6.1.1 version by default which is buggy -->
                    <dependency>
                        <groupId>com.puppycrawl.tools</groupId>
                        <artifactId>checkstyle</artifactId>
                        <version>6.5</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <configLocation>src/main/checkstyle/checkstyle.xml</configLocation>
                    <propertyExpansion>checkstyle.project.basedir=${project.basedir}</propertyExpansion>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.4</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.doxia</groupId>
                        <artifactId>doxia-module-markdown</artifactId>
                        <version>1.6</version>
                    </dependency>

                    <dependency>
                        <groupId>lt.velykis.maven.skins</groupId>
                        <artifactId>reflow-velocity-tools</artifactId>
                        <version>1.1.1</version>
                    </dependency>

                    <dependency>
                        <groupId>org.apache.velocity</groupId>
                        <artifactId>velocity</artifactId>
                        <version>1.7</version>
                    </dependency>
                </dependencies>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pdf-plugin</artifactId>
                <version>1.3</version>
                <!-- TODO:
                    - fix rendering of company and project logos
                    - add UTF-8 font
                -->
                <executions>
                    <execution>
                        <phase>site</phase>
                        <goals>
                            <goal>pdf</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.10.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
                <version>3.0.1</version>
                <configuration>
                    <effort>Max</effort>
                    <threshold>Low</threshold>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

    <!-- reporting plugins -->
    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>2.8</version>
                <configuration>
                    <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.10.2</version>
                <configuration>
                    <show>private</show>
                    <excludePackageNames>test.pl.chilldev.sites.*</excludePackageNames>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <version>3.4</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>2.15</version>
                <configuration>
                    <configLocation>src/main/checkstyle/checkstyle.xml</configLocation>
                    <propertyExpansion>checkstyle.project.basedir=${project.basedir}</propertyExpansion>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jxr-plugin</artifactId>
                <version>2.5</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-report-plugin</artifactId>
                <version>2.18.1</version>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <!-- TODO: 2.7 doesn't work well with Findbugs -->
                <version>2.6</version>
                <configuration>
                    <formats>
                        <format>html</format>
                    </formats>
                    <instrumentation>
                        <excludes>
                            <exclude>test/**/*.class</exclude>
                        </excludes>
                    </instrumentation>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
                <version>3.0.1</version>
                <configuration>
                    <effort>Max</effort>
                    <threshold>Low</threshold>
                </configuration>
            </plugin>
        </plugins>
    </reporting>

    <!-- project dependencies -->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <!-- components of the project -->
    <modules>
        <module>sites-backend</module>
        <module>sites-commons</module>
        <module>sites-core</module>
        <module>sites-frontend</module>
        <module>sites-rpc-client-backend</module>
        <module>sites-rpc-client-frontend</module>
        <module>sites-rpc-service</module>
    </modules>
</project>

Edit 2 (ErrorCode.java)

package pl.chilldev.sites.commons;

/**
 * JSON-RPC error codes.
 */
public class ErrorCode
{
    /**
     * Dummy code that represents successful operation - should not be used at all.
     */
    public static final int OK = 0;

    /**
     * No entity of specified ID exists.
     */
    public static final int NO_ENTITY = 1;
}
like image 418
Rafał Wrzeszcz Avatar asked Apr 12 '15 20:04

Rafał Wrzeszcz


2 Answers

Cobertura 2.7 alters project.build.outputDirectory in order to produce report for integration tests (new kind of report introduced in 2.7). In the next step Findbugs checks violations not on just compiled classes but on instrumented.

See bug:

http://jira.codehaus.org/browse/MCOBERTURA-203

As a workaround you can override classFilesDirectory:

...
<build>
...
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>findbugs-maven-plugin</artifactId>
            <version>3.0.1</version>
            <configuration>
                <effort>Max</effort>
                <threshold>Low</threshold>
                <classFilesDirectory>${project.build.outputDirectory}</classFilesDirectory>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>check</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
...
</build>
...

Another solution is to skip integration tests report and proceed with unit tests report only:

http://mojo.codehaus.org/cobertura-maven-plugin/usage.html#Using_different_reports

like image 169
Mateusz Balbus Avatar answered Sep 23 '22 08:09

Mateusz Balbus


If you force findbugs to run in the "compile" phase instead of the "test" phase, it will cause findbugs to run before the code is instrumented by cobertuar, thus solving the issue as described by Mateusz Balbus. This findbugs maven configuration works for me:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <version>3.0.5</version>
    <configuration>
        <executions>
            <execution>
                <id>findbugs-check</id>
                <phase>compile</phase>
                <goals>
                    <goal>check</goal>
                </goals>
            </execution>
        </executions>
    </configuration>
</plugin>
like image 36
Martin Avatar answered Sep 20 '22 08:09

Martin