EMMA 
This plugin uses the 
eponym SourceForge project
to provide Java code coverage.
   Declaration 
Here is the recommended configuration for EMMA plugin:
  <plugin name="emma">
    <attribute name="emma.set.list" value="application"/>
    <attribute name="emma.mode" value="offline"/>
    <attribute name="emma.switch" value="emma"/>
  </plugin>
   Usage 
EMMA is a Java code coverage tool that is designed to work with instrumented
classes.  This instrumentation step can be done on-the-fly by a dedicated
ClassLoader with non instrumented classes (
online mode), or in any JVM
runtime context with instrumented classes (
offline mode).
Application must be executed after EMMA instrumentation to collect code
coverage data, then the report generation provides you a comfortable way to
analyze the code that has not been executed. You can run as many execution
targets as possible or even the same target many times, code coverage data are
merged with any previous execution data.
   Offline mode 
The 
offline mode should be preferred to collect code coverage information in
any context: simple application, test cases or J2EE application deployed as a
EAR or a WAR.
With the recommended configuration provided below, you have to use 
compile
target to instrument classes before executing your application with the 
emma
property set on the command line:
  ant compile junit.startdev.all startdev.module.eu.mymodule.myeu -Demma=t
Code coverage information are collected, ready to be used in report generation.
   Online mode 
The 
online mode (on-the-fly) should be reserved to simple application and
test cases execution.
Its advantage is to skip the classes instrumentation step needed for the
offline mode.
  <plugin name="emma">
    <attribute name="emma.set.list" value="application"/>
    <attribute name="emma.mode" value="online"/>
    <attribute name="emma.switch" value="emma"/>
  </plugin>
As instrumentation step is not needed, if your classes are already compiled,
you can execute your runtime targets directly with 
emma set.
  ant junit.startdev.all startdev.module.eu.mymodule.myeu -Demma=t
   Report generation 
The target 
emma.report generates a code coverage report per module set
with currently available code coverage data, generated by EMMA-enabled execution 
targets. A module
can be registered in one or many sets thank to the 
set attribute.
Please read 
details about module sets.
For more details about EMMA usage, link report interpretation, please read the
tool documentation.
When used with the 
website plugin, EMMA are generated in the
reports.directory and a report entry is added to the project reports
overview.
   Advanced manual configuration 
This section describes how to enable EMMA support with a more fine grain, it is
reserved for expert users. In that case, the global plugin 
emma.mode and
emma.switch must not be set.
The hook registrations described here are exactly the same that the plugin
configuration does automatically on runnable module execution units marked with
the 
emma.mode attribute.
   Advanced offline mode 
Classes instrumentation is done by registering the following hook in your
project description:
  <!-- add emma.instrumentation target in the compile hook -->
  <hook name="post.javac.[module]" target="emma.instrumentation.module"/>
If the hook is at the project level, it applies to all available modules. If
the hook is declared at the module level, it only applies to the concerned
module.
Classes instrumentation is not enough. EMMA jar must be available in your Java
command ClassPath. To do so, the 
runtime.hook.emma.offline target must be
registered in the 
runtime.[module].[eu] hook chain, at least for runnable
module execution units.
  <hook name="runtime.[module].[eu]" target="runtime.hook.emma.offline"/>
If the hook is at the project level (faster but not advised), all runnable
execution unit modules are concerned. If declared at the module level, all
execution units of the module are concerned. If declared at the execution unit
level, only that execution unit is concerned.
As a result, code coverage data are collected for modules that are both
instrumented (
emma.instrumentation.module hook) and executed by a runtime
target with the 
runtime.hook.emma.offline target registered in the runtime
hook chain.
   Advanced on-the-fly mode 
The instrumentation hook must be removed (
emma.instrumentation.module) and
the runtime hook must be renamed: use 
runtime.hook.emma.online instead of
runtime.hook.emma.offline at the same place you have defined your module and
execution unit hooks.
  <hook 
    name="runtime.[module].[eu]"
    target="runtime.hook.emma.online"
    if="emma"/>
  ant startdev.module.eu.mymodule.myeu -Demma=
   Targets 
-  emma.reportgenerates reports for all module sets (emma.set.list).
-  emma.report.setgenerates the report for a specific set.
-  runtime.hook.emma.offlineis the runtime hook to enable offline code
     coverage in a Java command with instrumented classes.
-  runtime.hook.emma.onlineis the runtime hook to enable online code
     coverage in a Java command with non instrumented classes.
-  emma.instrumentinvokesemma.instrument.moduleon all modules.
-  emma.instrument.moduleinvokes EMMA incremental (only modified classes)
     instrumentation on a module classes directory. This target is designed
     to be registered in thepost.javac.[module]hook chain.
   Attributes 
   Global 
-  emma.modeis the default code coverage mode used for all runnable
     modules. If set tooffline, all module classes are instrumented.
-  emma.switchis the name of a property to enable instrumentation and code
     coverage support. If not defined, support is permanent. If defined,
     compilation must be done with this property set to enable instrumentation,
     and runtime targets must be executed also with this property set.
-  emma.set.listis the module set list for which theemma.reporttarget
     generates reports by default. Default value is the list of known module
     sets.
   Per module 
-  emma.modeis the module code coverage mode. If set toofflineand
     global mode is notoffline, then the module classes are instrumented.
   Per execution unit 
-  emma.modeis the execution unit code coverage mode. If set toofflineand global mode is notoffline, then the module classes are
     instrumented.
   Known issue 
-  EMMA on-the-fly code coverage analysis is not able to work with already
     instrumented classes. As a result, you have to clean and compile again
     your instrumented modules to switch from the offline usage to the online
     mode.
-  Current version outputs a text report in dist/runtimewhen running a
     command in on-the-fly mode.