1<?xml version="1.0" encoding="UTF-8" ?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
4<head>
5  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6  <link rel="stylesheet" href=".resources/doc.css" charset="UTF-8" type="text/css" />
7  <link rel="stylesheet" href="../coverage/.resources/prettify.css" charset="UTF-8" type="text/css" />
8  <link rel="shortcut icon" href=".resources/report.gif" type="image/gif" />
9  <script type="text/javascript" src="../coverage/.resources/prettify.js"></script>
10  <title>JaCoCo - Ant Tasks</title>
11</head>
12<body onload="prettyPrint()">
13
14<div class="breadcrumb">
15  <a href="../index.html" class="el_report">JaCoCo</a> &gt;
16  <a href="index.html" class="el_group">Documentation</a> &gt;
17  <span class="el_source">Ant Tasks</span>
18</div>
19<div id="content">
20
21<h1>Ant Tasks</h1>
22
23<p>
24  JaCoCo comes with Ant tasks to launch Java programs with execution recording
25  and for creating coverage reports from the recorded data. Execution data can
26  be collected and managed with the tasks
27  <a href="#coverage"><code>coverage</code></a>,
28  <a href="#agent"><code>agent</code></a>,
29  <a href="#dump"><code>dump</code></a> and
30  <a href="#merge"><code>merge</code></a>. Reports in different formats are
31  creates with the <a href="#report"><code>report</code></a> task. For
32  <a href="offline.html">offline instrumentation</a> the task
33  <a href="#instrument"><code>instrument</code></a> can be used to prepare class
34  files.
35</p>
36
37<p class="hint">
38  If you want to have line number information included in the coverage reports
39  or you want source code highlighting the class files of the test target must
40  be compiled with debug information.
41</p>
42
43<h2>Example</h2>
44
45<p>
46  The JaCoCo distribution contains a simple example how code coverage can be
47  added to a Ant based build. The
48  <a href="examples/build/build.xml">build script</a> compiles Java sources,
49  runs an simple Java programm and creates a coverage report. The complete
50  example is located in the <code>./doc/examples/build</code> folder of the
51  distribution.
52</p>
53
54
55<h2>Prerequisites</h2>
56
57<p>
58  The JaCoCo Ant tasks require
59</p>
60
61<ul>
62  <li>Ant 1.7.0 or higher and</li>
63  <li>Java 1.5 or higher (for both, the Ant runner and the test executor).</li>
64</ul>
65
66
67<p>All tasks are defined in <code>jacocoant.jar</code> (which is part of the
68  distribution) and can be included in your Ant scripts with the usual
69  <code>taskdef</code> declaration:
70</p>
71
72<pre class="source lang-xml linenums">
73&lt;project name="Example" xmlns:jacoco="antlib:org.jacoco.ant"&gt;
74
75    &lt;taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml"&gt;
76        &lt;classpath path="<i>path_to_jacoco</i>/lib/jacocoant.jar"/&gt;
77    &lt;/taskdef&gt;
78
79    ...
80
81&lt;/project&gt;
82</pre>
83
84<p>
85  Alternatively you might also place the <code>jacocoant.jar</code> in your
86  Ant <code><i>ANT_HOME</i>/lib</code> folder. If you use the name space URI
87  <code>antlib:org.jacoco.ant</code> for JaCoCo tasks Ant will find them
88  automatically without the <code>taskdef</code> declaration above.
89</p>
90
91<p class="hint">
92  Declaring a XML namespace for JaCoCo tasks is optional but always recommended
93  if you mix tasks from different libraries. All subsequent examples use the
94  <code>jacoco</code> prefix declared above. If you don't declare a separate
95  namespace the <code>jacoco</code> prefix must be removed from the following
96  examples.
97</p>
98
99<h2><a name="coverage">Task <code>coverage</code></a></h2>
100
101<p>
102  The standard Ant tasks to launch Java programs are <code>java</code>, <code>junit</code> and
103  <code>testng</code>. To add code coverage recording to these tasks they can
104  simply be wrapped with the <code>coverage</code> task as shown in the
105  following examples:
106</p>
107
108<pre class="source lang-xml linenums">
109&lt;jacoco:coverage>
110    &lt;java classname="org.jacoco.examples.HelloJaCoCo" fork="true"&gt;
111        &lt;classpath&gt;
112            &lt;pathelement location="./bin"/&gt;
113        &lt;/classpath&gt;
114    &lt;/java&gt;
115&lt;/jacoco:coverage&gt;
116
117
118&lt;jacoco:coverage>
119    &lt;junit fork="true" forkmode="once"&gt;
120        &lt;test name="org.jacoco.examples.HelloJaCoCoTest"/&gt;
121        &lt;classpath&gt;
122            &lt;pathelement location="./bin"/&gt;
123        &lt;/classpath&gt;
124    &lt;/junit&gt;
125&lt;/jacoco:coverage&gt;
126</pre>
127
128<p>
129  Resulting coverage information is collected during execution and written
130  to a file when the process terminates. Note the <code>fork</code> attribute
131  above in the wrapped <code>java</code> task.
132</p>
133
134<p class="hint">
135  The nested task always has to declare <code>fork="true"</code>, otherwise the
136  <code>coverage</code> task can't record coverage information and will fail.
137  In addition the <code>junit</code> task should declare
138  <code>forkmode="once"</code> to avoid starting a new JVM for every single test
139  case and decreasing execution performance dramatically (unless this is
140  required by the nature of the test cases).
141</p>
142
143<p>
144  The coverage task must wrap exactly one task. While it typically works without
145  any configuration, the behavior can be adjusted with some optional attributes:
146</p>
147
148<table class="coverage">
149  <thead>
150    <tr>
151      <td>Attribute</td>
152      <td>Description</td>
153      <td>Default</td>
154    </tr>
155  </thead>
156  <tbody>
157    <tr>
158      <td><code>enabled</code></td>
159      <td>If set to <code>true</code> coverage data will be collected for the contained task.</td>
160      <td><code>true</code></td>
161    </tr>
162    <tr>
163      <td><code>destfile</code></td>
164      <td>Path to the output file for execution data.</td>
165      <td><code>jacoco.exec</code></td>
166    </tr>
167    <tr>
168      <td><code>append</code></td>
169      <td>If set to <code>true</code> and the execution data file already
170          exists, coverage data is appended to the existing file. If set to
171          <code>false</code>, an existing execution data file will be replaced.
172      </td>
173      <td><code>true</code></td>
174    </tr>
175    <tr>
176      <td><code>includes</code></td>
177      <td>A list of class names that should be included in execution analysis.
178          The list entries are separated by a colon (<code>:</code>) and
179          may use wildcard characters (<code>*</code> and <code>?</code>).
180          Except for performance optimization or technical corner cases this
181          option is normally not required.
182      </td>
183      <td><code>*</code> (all classes)</td>
184    </tr>
185    <tr>
186      <td><code>excludes</code></td>
187      <td>A list of class names that should be excluded from execution analysis.
188          The list entries are separated by a colon (<code>:</code>) and
189          may use wildcard characters (<code>*</code> and <code>?</code>).
190          Except for performance optimization or technical corner cases this
191          option is normally not required.
192      </td>
193      <td><i>empty</i> (no excluded classes)</td>
194    </tr>
195    <tr>
196      <td><code>exclclassloader</code></td>
197      <td>A list of class loader names, that should be excluded from execution
198          analysis. The list entries are separated by a colon
199          (<code>:</code>) and may use wildcard characters (<code>*</code> and
200          <code>?</code>). This option might be required in case of special
201          frameworks that conflict with JaCoCo code instrumentation, in
202          particular class loaders that do not have access to the Java runtime
203          classes.
204      </td>
205      <td><code>sun.reflect.DelegatingClassLoader</code></td>
206    </tr>
207    <tr>
208      <td><code>inclbootstrapclasses</code></td>
209      <td>Specifies whether also classes from the bootstrap classloader should
210          be instrumented. Use this feature with caution, it needs heavy
211          includes/excludes tuning.
212      </td>
213      <td><code>false</code></td>
214    </tr>
215    <tr>
216      <td><code>sessionid</code></td>
217      <td>A session identifier that is written with the execution data. Without
218          this parameter a random identifier is created by the agent.
219      </td>
220      <td><i>auto-generated</i></td>
221    </tr>
222    <tr>
223      <td><code>dumponexit</code></td>
224      <td>If set to <code>true</code> coverage data will be written on VM
225          shutdown.
226      </td>
227      <td><code>true</code></td>
228    </tr>
229    <tr>
230      <td><code>output</code></td>
231      <td>Output method to use for writing coverage data. Valid options are:
232        <ul>
233          <li><code>file</code>: At VM termination execution data is written to
234              the file specified in the <code>destfile</code> attribute.</li>
235          <li><code>tcpserver</code>: The agent listens for incoming connections
236              on the TCP port specified by the <code>address</code> and
237              <code>port</code> attribute. Execution data is written to this
238              TCP connection.</li>
239          <li><code>tcpclient</code>: At startup the agent connects to the TCP
240              port specified by the <code>address</code> and <code>port</code>
241              attribute. Execution data is written to this TCP connection.</li>
242          <li><code>none</code>: Do not produce any output.</li>
243        </ul>
244      </td>
245      <td><code>file</code></td>
246    </tr>
247    <tr>
248      <td><code>address</code></td>
249      <td>IP address or hostname to bind to when the output method is
250          <code>tcpserver</code> or connect to when the output method is
251          <code>tcpclient</code>.  In <code>tcpserver</code> mode the value
252          "<code>*</code>" causes the agent to accept connections on any local
253          address.
254      </td>
255      <td><i>loopback interface</i></td>
256    </tr>
257    <tr>
258      <td><code>port</code></td>
259      <td>Port to bind to when the output method is <code>tcpserver</code> or
260          connect to when the output method is <code>tcpclient</code>. In
261          <code>tcpserver</code> mode the port must be available, which means
262          that if multiple JaCoCo agents should run on the same machine,
263          different ports have to be specified.
264      </td>
265      <td><code>6300</code></td>
266    </tr>
267    <tr>
268      <td><code>classdumpdir</code></td>
269      <td>Location relative to the working directory where all class files seen
270          by the agent are dumped to. This can be useful for debugging purposes
271          or in case of dynamically created classes for example when scripting
272          engines are used.
273      </td>
274      <td><i>no dumps</i></td>
275    </tr>
276    <tr>
277      <td><code>jmx</code></td>
278      <td>If set to <code>true</code> the agent exposes
279          <a href="./api/org/jacoco/agent/rt/IAgent.html">functionality</a> via
280          JMX under the name <code>org.jacoco:type=Runtime</code>.
281      </td>
282      <td><code>false</code></td>
283    </tr>
284  </tbody>
285</table>
286
287
288<h2><a name="agent">Task <code>agent</code></a></h2>
289
290<p>
291  If the <code>coverage</code> task is not suitable for your launch target, you
292  might alternatively use the <code>agent</code> task to create the
293  <a href="agent.html">Java agent</a> parameter. The following example defines a
294  Ant property with the name <code>agentvmparam</code> that can be directly used
295  as a Java VM parameter:
296</p>
297
298<pre class="source lang-xml linenums">
299&lt;jacoco:agent property="agentvmparam"/&gt;
300</pre>
301
302<p>
303  This task has the same attributes as the <code>coverage</code> task plus an
304  additional property to specify the target property name:
305</p>
306
307<table class="coverage">
308  <thead>
309    <tr>
310      <td>Attribute</td>
311      <td>Description</td>
312      <td>Default</td>
313    </tr>
314  </thead>
315  <tbody>
316    <tr>
317      <td><code>enabled</code></td>
318      <td>When this variable is set to <code>false</code> the value of <code>property</code> will be set to an empty string, effectively
319          disabling coverage instrumentation for any tasks that used the value.</td>
320      <td><code>true</code></td>
321    </tr>
322    <tr>
323      <td><code>property</code></td>
324      <td>Name of the Ant property to set.</td>
325      <td><i>none (required)</i></td>
326    </tr>
327    <tr>
328      <td colspan="3"><i>All attributes of the <code>coverage</code> task.</i></td>
329    </tr>
330  </tbody>
331</table>
332
333
334<h2><a name="dump">Task <code>dump</code></a></h2>
335
336<p>
337  This task allows to remotely collect execution data from another JVM without
338  stopping it. For example:
339</p>
340
341<pre class="source lang-xml linenums">
342&lt;jacoco:dump address="server.example.com" reset="true" destfile="remote.exec"/&gt;
343</pre>
344
345<p>
346  Remote dumps are usefull for long running Java processes like application
347  servers.
348</p>
349
350<p class="hint">
351  The target JVM needs to have a <a href="agent.html">JaCoCo agent</a>
352  configured with <code>output</code> mode <code>tcpserver</code>. See
353  <a href="#coverage"><code>coverage</code></a> and
354  <a href="#agent"><code>agent</code></a> tasks above.
355</p>
356
357<p>
358  The <code>dump</code> task has the following attributes:
359</p>
360
361<table class="coverage">
362  <thead>
363    <tr>
364      <td>Attribute</td>
365      <td>Description</td>
366      <td>Default</td>
367    </tr>
368  </thead>
369  <tbody>
370    <tr>
371      <td><code>address</code></td>
372      <td>Target IP address or DNS name.</td>
373      <td><code>localhost</code></td>
374    </tr>
375    <tr>
376      <td><code>port</code></td>
377      <td>Target TCP port.</td>
378      <td><code>6300</code></td>
379    </tr>
380    <tr>
381      <td><code>retryCount</code></td>
382      <td>Number of retries which the goal will attempt to establish a
383          connection. This can be used to wait until the target JVM is
384          successfully launched.</td>
385      <td><code>10</code></td>
386    </tr>
387    <tr>
388      <td><code>dump</code></td>
389      <td>Flag whether execution data should be dumped.</td>
390      <td><code>true</code></td>
391    </tr>
392    <tr>
393      <td><code>reset</code></td>
394      <td>Flag whether execution data should be reset in the target agent after
395          the dump.</td>
396      <td><code>false</code></td>
397    </tr>
398    <tr>
399      <td><code>destfile</code></td>
400      <td>File location to write the collected execution data to.</td>
401      <td><i>none (required if dump=true)</i></td>
402    </tr>
403    <tr>
404      <td><code>append</code></td>
405      <td>If set to <code>true</code> and the execution data file already
406          exists, coverage data is appended to the existing file. If set to
407          <code>false</code>, an existing execution data file will be replaced.
408      </td>
409      <td><code>true</code></td>
410    </tr>
411  </tbody>
412</table>
413
414
415<h2><a name="merge">Task <code>merge</code></a></h2>
416
417<p>
418  This task can be used to merge the execution data from multiple test runs
419  into a single data store.
420</p>
421
422<pre class="source lang-xml linenums">
423&lt;jacoco:merge destfile="merged.exec"&gt;
424    &lt;fileset dir="executionData" includes="*.exec"/&gt;
425&lt;/jacoco:merge&gt;
426</pre>
427
428<p>
429  The task definition can contain any number of resource collection types and
430  has the following mandatory attribute:
431</p>
432
433<table class="coverage">
434  <thead>
435    <tr>
436      <td>Attribute</td>
437      <td>Description</td>
438      <td>Default</td>
439    </tr>
440  </thead>
441  <tbody>
442    <tr>
443      <td><code>destfile</code></td>
444      <td>File location to write the merged execution data to.</td>
445      <td><i>none (required)</i></td>
446    </tr>
447  </tbody>
448</table>
449
450
451<h2><a name="report">Task <code>report</code></a></h2>
452
453<p>
454  Finally different reports can be created with the <code>report</code> task.
455  A report task declaration consists of different sections, two specify the
456  input data, additional ones specify the output formats:
457</p>
458
459<pre class="source lang-xml linenums">
460&lt;jacoco:report&gt;
461
462    &lt;executiondata&gt;
463        &lt;file file="jacoco.exec"/&gt;
464    &lt;/executiondata&gt;
465
466    &lt;structure name="Example Project"&gt;
467        &lt;classfiles&gt;
468            &lt;fileset dir="classes"/&gt;
469        &lt;/classfiles&gt;
470        &lt;sourcefiles encoding="UTF-8"&gt;
471            &lt;fileset dir="src"/&gt;
472        &lt;/sourcefiles&gt;
473    &lt;/structure&gt;
474
475    &lt;html destdir="report"/&gt;
476
477&lt;/jacoco:report&gt;
478</pre>
479
480<p>
481  As you can see from the example above the <code>report</code> task is based
482  on several nested elements:
483</p>
484
485<h3>Element <code>executiondata</code></h3>
486
487<p>
488  Within this element Ant resources and resource collections can be specified,
489  that represent JaCoCo execution data files. If more than one execution data
490  file is specified, execution data is combined. A particular piece of code is
491  considered executed when it is marked as such in any of the input files.
492</p>
493
494<h3>Element <code>structure</code></h3>
495
496<p>
497  This element defines the report structure. It might contain the following
498  nested elements:
499</p>
500
501<ul>
502  <li><code>classfiles</code>: Container element for Ant resources and resource
503    collections that can specify Java class files, archive files (jar, war, ear
504    etc. or Pack200) or folders containing class files. Archives and folders are
505    searched recursively for class files.</li>
506  <li><code>sourcefiles</code>: Optional container element for Ant resources and
507    resource collections that specify corresponding source files. If source
508    files are specified, some report formats include highlighted source code.
509    Source files can be specified as individual files or as source directories.</li>
510</ul>
511
512<p>
513  The <code>sourcefiles</code> element has these optional attributes:
514</p>
515
516<table class="coverage">
517  <thead>
518    <tr>
519      <td>Attribute</td>
520      <td>Description</td>
521      <td>Default</td>
522    </tr>
523  </thead>
524  <tbody>
525    <tr>
526      <td><code>encoding</code></td>
527      <td>Character encoding of the source files.</td>
528      <td>Platform default encoding</td>
529    </tr>
530    <tr>
531      <td><code>tabwidth</code></td>
532      <td>Number of whitespace characters that represent a tab character.</td>
533      <td>4 characters</td>
534    </tr>
535  </tbody>
536</table>
537
538<p class="hint">
539  <b>Important:</b> Source file resources must always be specified relative to
540  the respective source folder. If directory resources are given, they must
541  directly point to source folders. Otherwise source lookup will not succeed.
542</p>
543
544<p>
545  Note that the <code>classfiles</code> and <code>sourcefiles</code> elements
546  accept any
547  <a href="http://ant.apache.org/manual/Types/resources.html#collection">Ant
548  resource collection</a>. Therefore also filtering the class file set is
549  possible and allows to narrow the scope of the report, for example:
550</p>
551
552<pre class="source lang-xml linenums">
553&lt;classfiles&gt;
554    &lt;fileset dir="classes"&gt;
555        &lt;include name="org/jacoco/examples/important/**/*.class"/&gt;
556    &lt;/fileset&gt;
557&lt;/classfiles&gt;
558</pre>
559
560<p class="hint">
561  <b>Performance Warning:</b> Although it is technically possible and sometimes
562  convenient to use Ant's <code>zipfileset</code> to specify class or source
563  files, this resource type has poor performance characteristics and comes with
564  an huge memory overhead especially for large scale projects.
565</p>
566
567<p>
568  The structure can be refined with a hierarchy of <code>group</code> elements.
569  This way the coverage report can reflect different modules of a software
570  project. For each group element the corresponding class and source files can
571  be specified separately. For example:
572</p>
573
574<pre class="source lang-xml linenums">
575&lt;structure name="Example Project"&gt;
576    &lt;group name="Server"&gt;
577        &lt;classfiles&gt;
578            &lt;fileset dir="${workspace.dir}/org.jacoco.example.server/classes"/&gt;
579        &lt;/classfiles&gt;
580        &lt;sourcefiles&gt;
581            &lt;fileset dir="${workspace.dir}/org.jacoco.example.server/src"/&gt;
582        &lt;/sourcefiles&gt;
583    &lt;/group&gt;
584    &lt;group name="Client"&gt;
585        &lt;classfiles&gt;
586            &lt;fileset dir="${workspace.dir}/org.jacoco.example.client/classes"/&gt;
587        &lt;/classfiles&gt;
588        &lt;sourcefiles&gt;
589            &lt;fileset dir="${workspace.dir}/org.jacoco.example.client/src"/&gt;
590        &lt;/sourcefiles&gt;
591    &lt;/group&gt;
592
593    ...
594
595&lt;/structure&gt;
596</pre>
597
598<p>
599  Both <code>structure</code> and <code>group</code> elements have the following
600  mandatory attribute:
601</p>
602
603<table class="coverage">
604  <thead>
605    <tr>
606      <td>Attribute</td>
607      <td>Description</td>
608      <td>Default</td>
609    </tr>
610  </thead>
611  <tbody>
612    <tr>
613      <td><code>name</code></td>
614      <td>Name of the structure or group.</td>
615      <td><i>none (required)</i></td>
616    </tr>
617  </tbody>
618</table>
619
620<h3>Element <code>html</code></h3>
621
622<p>
623  Create a multi-page report in HTML format. The report can either be written as
624  multiple files into a directory or compressed into a single ZIP file.
625</p>
626
627<table class="coverage">
628  <thead>
629    <tr>
630      <td>Attribute</td>
631      <td>Description</td>
632      <td>Default</td>
633    </tr>
634  </thead>
635  <tbody>
636    <tr>
637      <td><code>destdir</code></td>
638      <td>Directory to create the report in. Either this property or
639        <code>destfile</code> has to be supplied.</td>
640      <td><i>none (required)</i></td>
641    </tr>
642    <tr>
643      <td><code>destfile</code></td>
644      <td>Zip file to create the report in.  Either this property or
645        <code>destdir</code> has to be supplied.</td>
646      <td><i>none (required)</i></td>
647    </tr>
648    <tr>
649      <td><code>footer</code></td>
650      <td>Footer text for each report page.</td>
651      <td><i>no footer</i></td>
652    </tr>
653    <tr>
654      <td><code>encoding</code></td>
655      <td>Character encoding of generated HTML pages.</td>
656      <td><code>UTF-8</code></td>
657    </tr>
658    <tr>
659      <td><code>locale</code></td>
660      <td>Locale specified as ISO code (en, fr, jp, ...) used for number
661      formating. Locale country and variant can be separated with an underscore
662      (de_CH).</td>
663      <td><i>platform locale</i></td>
664    </tr>
665  </tbody>
666</table>
667
668<h3>Element <code>xml</code></h3>
669
670<p>
671  Create a single-file report in XML format.
672</p>
673
674<table class="coverage">
675  <thead>
676    <tr>
677      <td>Attribute</td>
678      <td>Description</td>
679      <td>Default</td>
680    </tr>
681  </thead>
682  <tbody>
683    <tr>
684      <td><code>destfile</code></td>
685      <td>Location to write the report file to.</td>
686      <td><i>none (required)</i></td>
687    </tr>
688    <tr>
689      <td><code>encoding</code></td>
690      <td>Encoding of the generated XML document.</td>
691      <td><code>UTF-8</code></td>
692    </tr>
693  </tbody>
694</table>
695
696<h3>Element <code>csv</code></h3>
697
698<p>
699  Create single-file report in CSV format.
700</p>
701
702<table class="coverage">
703  <thead>
704    <tr>
705      <td>Attribute</td>
706      <td>Description</td>
707      <td>Default</td>
708    </tr>
709  </thead>
710  <tbody>
711    <tr>
712      <td><code>destfile</code></td>
713      <td>Location to write the report file to.</td>
714      <td><i>none (required)</i></td>
715    </tr>
716    <tr>
717      <td><code>encoding</code></td>
718      <td>Encoding of the generated CSV document.</td>
719      <td><code>UTF-8</code></td>
720    </tr>
721  </tbody>
722</table>
723
724<h3>Element <code>check</code></h3>
725
726<p>
727  This report type does not actually create a report. It checks coverage
728  counters and reports violations of configured rules. Every rule is applied to
729  elements of a given type (class, package, bundle, etc.) and has a list of
730  limits which are checked for every element. The following example checks that
731  for every package the line coverage is at least 80% and no class is missed:
732</p>
733
734<pre class="source lang-xml linenums">
735&lt;check&gt;
736    &lt;rule element="PACKAGE"&gt;
737        &lt;limit counter="LINE" value="COVEREDRATIO" minimum="0.80"/&gt;
738        &lt;limit counter="CLASS" value="MISSEDCOUNT" maximum="0"/&gt;
739    &lt;/rule&gt;
740&lt;/check&gt;
741</pre>
742
743<p>
744  The <code>check</code> element has the following attributes:
745</p>
746
747<table class="coverage">
748  <thead>
749    <tr>
750      <td>Attribute</td>
751      <td>Description</td>
752      <td>Default</td>
753    </tr>
754  </thead>
755  <tbody>
756    <tr>
757      <td><code>rules</code></td>
758      <td>List of rules to check.</td>
759      <td><i>none</i></td>
760    </tr>
761    <tr>
762      <td><code>failonviolation</code></td>
763      <td>Specifies whether build should fail in case of rule violations.</td>
764      <td><code>true</code></td>
765    </tr>
766    <tr>
767      <td><code>violationsproperty</code></td>
768      <td>The name of an Ant property which is filled with the violation
769          messages.</td>
770      <td><i>none</i></td>
771    </tr>
772  </tbody>
773</table>
774
775<p>
776  Within the <code>check</code> element any number of <code>rule</code> elements
777  can be nested:
778</p>
779
780<table class="coverage">
781  <thead>
782    <tr>
783      <td>Attribute</td>
784      <td>Description</td>
785      <td>Default</td>
786    </tr>
787  </thead>
788  <tbody>
789    <tr>
790      <td><code>element</code></td>
791      <td>The elements this rule applies to. Possible values are
792          <code>BUNLDE</code>, <code>PACKAGE</code>, <code>CLASS</code>,
793          <code>SOURCEFILE</code> and <code>METHOD</code>.</td>
794      <td><code>BUNLDE</code></td>
795    </tr>
796    <tr>
797      <td><code>includes</code></td>
798      <td>A list of element names that should be checked. The list entries are
799          separated by a colon (:) and may use wildcard characters (* and ?).</td>
800      <td><code>*</code></td>
801    </tr>
802    <tr>
803      <td><code>excludes</code></td>
804      <td>A list of element names that should not be checked. The list entries
805          are separated by a colon (:) and may use wildcard characters (* and ?).</td>
806      <td><i>empty (no excludes)</i></td>
807    </tr>
808    <tr>
809      <td><code>limits</code></td>
810      <td>List of limits to check.</td>
811      <td><i>none</i></td>
812    </tr>
813  </tbody>
814</table>
815
816<p>
817  Within the <code>rule</code> element any number of <code>limit</code> elements
818  can be nested:
819</p>
820
821<table class="coverage">
822  <thead>
823    <tr>
824      <td>Attribute</td>
825      <td>Description</td>
826      <td>Default</td>
827    </tr>
828  </thead>
829  <tbody>
830    <tr>
831      <td><code>counter</code></td>
832      <td>The <a href="counters.html">counter</a> which should be checked.
833          Possible options are <code>INSTRUCTION</code>, <code>LINE</code>,
834          <code>BRANCH</code>, <code>COMPLEXITY</code>, <code>METHOD</code> and
835          <code>CLASS</code>.</td>
836      <td><code>INSTRUCTION</code></td>
837    </tr>
838    <tr>
839      <td><code>value</code></td>
840      <td>The counter value that should be checked. Possible options are
841      <code>TOTALCOUNT</code>, <code>MISSEDCOUNT</code>,
842      <code>COVEREDCOUNT</code>, <code>MISSEDRATIO</code> and
843      <code>COVEREDRATIO</code>.</td>
844      <td><code>COVEREDRATIO</code></td>
845    </tr>
846    <tr>
847      <td><code>minimum</code></td>
848      <td>Expected minmimum value. If the minimum refers to a ratio the range is
849          from 0.0 to 1.0 where the number of decimal places will also determine
850          the precision in error messages.</td>
851      <td><i>none</i></td>
852    </tr>
853    <tr>
854      <td><code>maximum</code></td>
855      <td>Expected maximum value.</td>
856      <td><i>none</i></td>
857    </tr>
858  </tbody>
859</table>
860
861<h2><a name="instrument">Task <code>instrument</code></a></h2>
862
863<p class="hint">
864  <b>Warning:</b> The preferred way for code coverage analysis with JaCoCo is
865  on-the-fly instrumentation. Offline instrumentation has several drawbacks and
866  should only be used if a specific scenario explicitly requires this mode.
867  Please consult <a href="offline.html">documentation</a> about offline
868  instrumentation before using this mode.
869</p>
870
871<p>
872  This task is used for <a href="offline.html">offline instrumentation</a> of
873  class files. The task takes a set of files and writes instrumented
874  versions to a specified location. The task takes any file type as input. Java
875  class files are instrumented. Archives (jar, war, ear etc. or Pack200) are
876  searched recursively for class files which then get instrumented. All other
877  files are copied without modification.
878</p>
879
880<pre class="source lang-xml linenums">
881&lt;jacoco:instrument destdir="target/classes-instr"&gt;
882    &lt;fileset dir="target/classes" includes="**/*.class"/&gt;
883&lt;/jacoco:instrument&gt;
884</pre>
885
886<p>
887  The task definition can contain any number of resource collection types and
888  has the following mandatory attribute:
889</p>
890
891<table class="coverage">
892  <thead>
893    <tr>
894      <td>Attribute</td>
895      <td>Description</td>
896      <td>Default</td>
897    </tr>
898  </thead>
899  <tbody>
900    <tr>
901      <td><code>destdir</code></td>
902      <td>Directory location to write the instrumented files to.</td>
903      <td><i>none (required)</i></td>
904    </tr>
905    <tr>
906      <td><code>removesignatures</code></td>
907      <td>If set to <code>true</code> all signature related information is
908          stripped from JARs. This is typically necessary as instrumentation
909          breaks the signatures of the original class files.</td>
910      <td><code>true</code></td>
911    </tr>
912  </tbody>
913</table>
914
915</div>
916<div class="footer">
917  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
918  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
919</div>
920
921</body>
922</html>
923