Cobertura is a free Java code coverage reporting tool. It is
based on jcoverage 1.0.5. See the [Cobertura web page](http://cobertura.sourceforge.net/)
and [wiki](https://github.com/cobertura/cobertura/wiki) for more details.
Since 2.0.0, Cobertura versions follow the [Semantic versioning](http://semver.org/) guidelines.
Code in the net.sourceforge.cobertura.javancss package is
Copyright (C) 2000 Chr. Clemens Lee <clemens a.t kclee d.o.t com>
See the included file "LICENSE.txt"
Cobertura is free software. Most of it is licensed under the GNU
GPL, and you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option)
any later version. Please review the file LICENSE.txt included in this
distribution for further details.
Parts of Cobertura are licensed under the Apache Software License,
Cobertura is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
* check all tests pass
* build the project, so that all code gets uniformly indented. A Maven plugin ensures this.
List of all contributors to Cobertura listed alphabetically by last name
* Copyright (C) 2005 Björn Beskow <bbeskow a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2008 Matt Cordes <mcordes a.t visa d.o.t com>
* Copyright (C) 2005 Erik Dick <erdick a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2005 Mark Doliner <thekingant a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2005 Joakim Erdfelt <joakim a.t erdfelt d.o.t net>
* Copyright (C) 2008 Scott Frederick <scottyfred a.t gmail d.o.t com>
* Copyright (C) 2008 Julian Gamble <juliangamble a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2006 Dan Godfrey <dgodfrey99 a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2008 Tri Bao Ho <hotribao a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2006 Naoki Iwami <naoki_iwami a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2003 jcoverage ltd.
* Copyright (C) 2009 John Lewis <lewijw a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2005 Grzegorz Lukasik <hauserx a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2006 Jiri Mares <jirimares a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2009 Amit Nithianandan <ANithian a.t gmail d.o.t com>
* Copyright (C) 2005 Olivier Parent <olivier-parent a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2009 Ed Randall <ed_randall a.t yahoo d.o.t com>
* Copyright (C) 2005 Alex Ruiz <alruiz15 a.t users d.o.t yahoo d.o.t com>
* Copyright (C) 2005 James Seigel <cgul a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2005 Mark Sinke <marksinke a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2010 Tad Smith <tsmith a.t lw-lmco d.o.t com>
* Copyright (C) 2009 Charlie Squires <rockonword a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2010 Piotr Tabor <piotr.tabor a.t gmail d.o.t com>
* Copyright (C) 2005 Jeremy Thomerson <jthomerson a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2009 Chris van Es <cvanes a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2006 Srivathsan Varadarajan <vatsanv a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2005 Nathan Wilson <ndciwilson a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2005 Alexei Yudichev <sflexus a.t users d.o.t sourceforge d.o.t net>
* Copyright (C) 2013 Steven Christou <schristou88 a.t gmail d.o.t com>
## MAVEN MIGRATION NOTES
* *How do we get a good blame while all files were moved?*
Use "git blame --follow" nameOfFile.java
### version 2.0.3:
* Fixed null version in reports. (Github Issue 37)
* Added auxClasspath argument to fix ClassNotFoundException with ClassWriter.getCommonSuperClass. Thanks Hendrik Brummermann(nhnb)
* Fixed parsing of anonymous classes. (Github Issue 53)
* Fixed ClassCastException with JumpTouchPointDescriptor, SwitchTouchPointDescriptor and LineTouchPointDescriptor.
* Fixed parsing for += in if-statement.
### version 2.0.2:
* Compiled code using source and target of java 5.
* Fixed sensitive test units.
### version 2.0.1:
* Fix a problem that occurs if class version lower than 49.
### version 2.0.0:
* New --ignoreTrivial switch that tells Cobertura to ignore the
following in the coverage report: Getter methods that simply
read a class field; Setter methods that set a class field;
Constructors that only set class fields and call a super
(Patch 3010530 from 1576631) (Scott Frederick/Tad Smith)
* New --ignoreMethodAnnotation switch used to specify an annotation that,
when present on a method, will cause Cobertura to ignore the
method in the coverage report.
(Patch 3010530) (Tad Smith)
### version 126.96.36.199:
* Fix a problem that occurs in Tomcat. When TouchCollector
initializes, it calls ProjectData.initialize() which (with
Tomcat only) eventually calls TouchCollector. However,
TouchCollector's static members have not been initialized.
Added a test that highlights this problem. (Thanks to Jack Cobb
for suggesting the fix).
* Runs on Java 5. (Fix for Bug 2962599).
### version 1.9.4:
* Cobertura is now up to 10x faster. Aggregates changes in
temporary TouchCollector class (thread-safe, but lock-free) and after that
applies it on real model (ProjectData) as a batch operation. (Piotr Tabor)
* Fixed "Some packages are included more then once" bug (#2875576) that
caused some counts on the HTML report to be incorrect. (Charlie Squires)
* Fixed "Inner classes not counted in coverage report total" bug (#2943320)
### version 1.9.3:
* Update to the latest Javancss (32.53) to fix some complexity calculation
problems. Bug #2824425. (John Lewis)
* Non-Java source files (like Groovy) no longer show the JavaNCSS warnings
during cobertura-report. Fix of bug #2819844.
* Support the case where multiple classloaders each load the Cobertura
classes. (Ed Randall)
* Fixed bug added with 1.9.2 where a NullPointerException is thrown
if ProjectData.saveGlobalProjectData() is called before any instrumented
code is executed.
### version 1.9.2:
* Cobertura is now thread safe.
* Fix for FileLocker exception when writing coverage data
(java.lang.IllegalStateException: Shutdown in progress) that started
to appear with Java 6 update 14. (Chris van Es)
* Fix for bug "Unix scripts behave oddly due to DOS format - ID: 2788621"
### version 188.8.131.52:
* Just a copy of 1.9.1 with a corrected Maven POM file (cobertura-runtime.pom).
A new version has to be created to get it uploaded to the central Maven repo.
### version 1.9.1:
* Complexity calculation now works with Java 5 language
features such as Annotations. (Tri Bao Ho)
* Removed the bold font from the source-view for uncovered lines to
improve the alignment. (Jiri Mares)
* Support Ant <dirset>s. (Matt Cordes, John Lewis)
* Support the antlib mechanism for defining and importing
ant tasks. (Richard Atkins)
* Reports now support source encoded in something than UTF-8. (Jiri Mares)
* Report generation performance improvement. (Ignat Zapolsky)
* Report generation will look in zip and jar files if the
source java file is not found. (Charlie Squires, John Lewis)
* cobertura-check with linerate=0, branchrate=0,
packagebranchrate=0, packagelinerate=0, totalbranchrate=0,
totallinerate=0 will no longer default all the values to
50 as before. Therefore, cobertura-check will always pass.
Note that this still means that <cobertura-check /> (with
no attributes) will still default to 50 for all rates. (Charlie
Squires) (Bug 2152919)
* New coberturaFlush.war is created. Deploy it to a
web server and invoke http://<HOST>:<PORT>/coberturaFlush/flushCobertura
for a convenient way of flushing the cobertura data to the
datafile without stopping the web server. (Amit Nithianandan)
* XML report now shows total lines-covered, lines-valid,
branches-covered, branches-valid, and complexity. (Julian Gamble)
* New report option called "summaryXml" will create
a small summary XML report that does not have all the
details on the classes - just the overall totals. This
is for large projects where the full XML report gets so
big it impairs continuous build processes. (Julian Gamble and Dan Godfrey)
* Migrated from asm-2.2.1 to asm-3.0. (Jiri Mares)
* The percentage coverage of 199 out of 200 lines has been 100%.
No more! Now it is 99%. (Jiri Mares)
* Spelling error corrected in main.css file - changed magin to
margin. (Dennis Lundberg)
### version 1.9:
* Much improved branch coverage. Information on whether
the true as well as the false of an if statement is
collected. Also, information on the branches of a
switch statement (including the default) is collected.
* Assume Java source files are saved as UTF-8 instead of
the computer's default encoding.
* Write all HTML and XML reports in UTF-8 instead of the
computer's default encoding (Naoki Iwami).
* Fix a bug where the Cobertura ant tasks would not work
correctly in Microsoft Windows when Cobertura was
installed on a different drive than the drive from which
you're running ant (Srivathsan Varadarajan).
* Added a "maxmemory" attribute to the instrument, merge
and report ant tasks (Matt Cordes).
* Improve support for Maven and similar environments where
control over system properties is difficult such as
app servers, IoC containers, IDEs, etc. Setting the
datafile location is difficult in these environments.
To correct this, a cobertura.properties file
located in the classpath is used to properly set the
### version 1.8 (2006-04-10)
* Ability to have multiple <ignore/> regular expressions
in the instrument task (Alexei Yudichev).
* Ability to specify a minimum branch coverage rate and
line coverage rate for each package when using
* Show the number of lines and branches covered and the
total number of lines and branches in the HTML report.
* Support for instrumenting classes written in Groovy.
* Lock the data file before trying to write to it. This
allows multiple JVMs (or multiple class loaders within
a single JVM) to write to the same coverage data file
with no problems (John Lewis).
* Ability to instrument classes on a given classpath
instead of specifying filesets (John Lewis).
* Ability to specify which classes will be instrumented
using regular expressions (John Lewis).
* Archives within archives will be instrumented if you
specify an includeClassname regular expression (John
* If instrumenting an archive, remove any signatures
and checksums, since they will no longer be valid (John
* Removed the Class-Path line from cobertura.jar. You may
need to modify your Cobertura taskdef to include the jars
in Cobertura's 'lib' directory. See our Ant task web
page for an example.
* Reorganized libs into a flatter directory structure--you
may need to update your ant scripts.
* Upgraded from asm 2.1 to asm 2.2.1. No code changes were
* Copied portions of classes from JavaNCSS into Cobertura
so that we don't need to include the entire JavaNCSS and
### version 1.7 (2005-12-06)
* log4j is no longer used by the Cobertura classes that are
accessed by instrumented Java code. This means you will
not need to add log4j to your project's classpath in order
to use Cobertura (but log4j is still required when
instrumenting and reporting).
* Upgraded from asm 2.0 to asm 2.1. No code changes were
* Improved the merge task. It should work correctly now
(with help from Björn Beskow).
* Fixed the ability to specify a data file in the merge task.
* Changed the command-line interface to the merge task and
added a helper batch/shell script.
* Added better error checking to the merge task.
* Fixed a bug where an empty or incomplete coverage data
file would be written when you test classes inside Tomcat,
and you stop Tomcat using the shutdown.bat or shutdown.sh
scripts. This would result in an EOFException when running
* Added support for classes compiled with AspectJ.
* Cobertura now produces valid XHTML 1.0 reports.
### version 1.6 (2005-08-22)
* Can now use multiple filesets in the cobertura-instrument
task (Thanks to Grzegorz Lukasik).
* Can now use multiple filesets in the cobertura-report task
(Thanks to Jeremy Thomerson, Grzegorz Lukasik and James Seigel).
* No longer using the Java version of GNU GetOpt
* Fixed a bug where the total number of classes displayed in
the HTML report included anonymous classes when it should
### version 1.5 (2005-08-05)
* Shortened the header shown when running Cobertura (Thanks
to Jarkko Viinamäki).
* Don't save the data file twice after instrumenting.
* Print a warning when running cobertura-report with a
data file that does not contain information from the
* When instrumenting, you can now specify a zip, jar, war,
ear or sar file and Cobertura will instrument any classes
inside of the archive. You must explicity give the name
of the archive when instrumenting--giving the name of the
directory containing the archive will not work (Thanks to
* Fixed a bug where the class list in the HTML reports did
not show multiple classes with the same name, but in
* Add a timestamp and version number to all HTML reports.
* Add a timestamp and version number to all XML reports.
* Add the combined line-rate and branch-rate for all
packages to all XML reports.
* Fixed the merge task (Thanks to Mark Sinke).
* The check task now supports checking against a project's
total branch and line coverage rates (Thanks to Nathan
* The check ant task now allows you to fail the ant build,
if desired (Thanks to Nathan Wilson).
* The check task can set an ant property to "true" on
failure (Thanks to Alex Ruiz).
* Changed some of the parameters for the check task. See
the online documentation for usage information.
* The command line Windows batch scripts work better.
### version 1.4 (2005-05-30)
* Fixed a bug that sometimes resulted in a
StringIndexOutOfBoundsException when running cobertura-report
(Thanks to Grzegorz Lukasik).
* Fixed a bug where classes without coverage data ("N/A") were
not always sorted correctly in the HTML report (Thanks to
* Fixed a bug where the code complexity column would not always
sort correctly in locales that use a comma to split the decimal
part of the number (Thanks to Olivier Parent).
* Show "N/A" in the branch column of the HTML report for classes
and packages that do not have any branches.
### version 1.3 (2005-05-20)
* Increased speed of HTML reports by filtering the files read
in to determine cyclomatic complexity numbers on.
* In the lower left pane of the HTML reports, classes are now
sorted only by their class name (instead of by their package
name plus class name).
* Changed the format of the XML reports to something that
is hopefully easier to use and more natural. This
unfortunately breaks backward compatability.
* We're using a DTD for the XML reports now. See
* Added the ability to specify the location of the coverage
data files from the ant tasks and the command line.
* More user-friendly error checking and reporting.
### version 1.2 (2005-03-16)
* Fix a bug that caused the XML reports to be invalid XML
(they were missing the </package> tag).
* Use Java 1.4 pattern matching and remove Jakarta ORO.
### version 1.1 (2005-03-08)
* Fix a bug in the syntax highlighting code of the HTML report
generation. Previously, the highlighting for single quotes
containing "\\" would not end correctly.
* Check the third party jars into CVS using the correct CVS
substition flag (binary, not ASCII).
* Temporary files created by the instrument ant task and merge
ant task are now deleted after the ant task finishes.
* Switch the instrumentation classes to use ASM instead of
Apache BCEL. There are three benefits to this:
1. BCEL was throwing exceptions with some source code compiled
with JDK 1.5--ASM works fine.
2. ASM is licensed under the revised BSD license, which
is compatable with the GPL, which allows us to remove
the questionable exception for BCEL.
3. Instrumentation is about 5 times faster with ASM than BCEL.
* Modify the HTML reports so that classes without line number
information will appear as "Not Applicable." This includes
skeleton classes, stub classes, interfaces, or anything not
compiled with debug=true.
* Fix bug #1151777 with a patch from Jeremy Thomerson.
Previously we were not escaping some characters correctly in the
generated XML coverage report (specificially < and >).
* Set the class-path in the cobertura.jar manifest file correctly.
* Fill feature request #1151779 with a patch from Jeremy Thomerson.
This changes the structure of the XML report so that <classes> are
enclosed inside <packages>.
### version 1.0 (2005-02-12)
* Forked jcoverage 1.0.5 (although the version in the source says 1.0.4).
All original code is copyright 2003 jcoverage ltd. Kurt Guenther
highlighted a bug in the branch coverage, was was fixed.
* Applied a patch from Joakim Erdfelt to fix a bug where jcoverage
would fail to instrument classes if you attempted to instrument a
very large number of classes (in the hundreds).
* Rewrote the HTML reporting and included code complexity in the output.