Home | History | Annotate | Download | only in doc
      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="shortcut icon" href="resources/report.gif" type="image/gif" />
      8   <title>JaCoCo - FAQ</title>
      9 </head>
     10 <body>
     11 
     12 <div class="breadcrumb">
     13   <a href="../index.html" class="el_report">JaCoCo</a> &gt;
     14   <a href="index.html" class="el_group">Documentation</a> &gt;
     15   <span class="el_source">FAQ</span>
     16 </div>
     17 <div id="content"> 
     18 
     19 <h1>FAQ</h1>
     20 
     21 <p>
     22   This is a compilation of questions that have been asked by JaCoCo users
     23   before.
     24 </p>
     25 
     26 <h3>Does JaCoCo have a plug-in for [Eclipse|Netbeans|Whatever...]?</h3>
     27 <p>
     28   See <a href="integrations.html">this list</a> for current integrations with
     29   various tools.
     30 </p>
     31 
     32 <h3>What Java versions are supported by JaCoCo?</h3>
     33 <p>
     34   JaCoCo supports Java class files from version 1.0 to 9. However the minimum
     35   JRE version required by the JaCoCo runtime (e.g. the agent) and the JaCoCo
     36   tools is 1.5. Also note that class files under test from version 1.6 and above
     37   have to contain valid stackmap frames.
     38 </p>
     39 
     40 <h3>Why do I get the error "Can't add different class with same name"?</h3>
     41 <p>
     42   For coverage report generation all classes within a group must have unique
     43   names. You get this error during report generation if JaCoCo is supplied with
     44   multiple different class files with the same name. To fix this remove those
     45   duplicate classes or create separate reports or report groups for each version.
     46 </p>
     47 
     48 <h3>Source code lines with exceptions show no coverage. Why?</h3>
     49 <p>
     50   JaCoCo determines code execution with so called probes. Probes are inserted
     51   into the control flow at certain positions. Code is considered as executed
     52   when a subsequent probe has been executed. In case of exceptions such a
     53   sequence of instructions is aborted somewhere in the middle and the
     54   corresponding line of source code is not marked as covered.
     55 </p>
     56 
     57 <h3>Why does the coverage report not show line coverage figures?</h3>
     58 <p>
     59   JaCoCo is based on class files analysis. To calculate line coverage class
     60   files must contain line number attributes. For this your code must be compiled
     61   with debug information.
     62 </p>
     63 
     64 <h3>Why does the coverage report not show highlighted source code?</h3>
     65 <p>
     66   Make sure the following prerequisites are fulfilled to get source code
     67   highlighting in JaCoCo coverage reports:
     68 </p>
     69 <ul>
     70   <li>Class files must be compiled with debug information to contain line numbers.</li>
     71   <li>Source files must be properly supplied at report generation time. I.e.
     72       specified source folders must be the direct parent of the folders that
     73       define the Java packages.</li>
     74 </ul>
     75 
     76 <h3>Why does a class show as not covered although it has been executed?</h3>
     77 <p>
     78   First make sure execution data has been collected. For this select the
     79   <i>Sessions</i> link on the top right corner of the HTML report and check
     80   whether the class in question is listed. If it is listed but not linked the
     81   class at execution time is a different class file. Make sure you're using the
     82   exact same class file at runtime as for report generation. Note that some
     83   tools (e.g. EJB containers, mocking frameworks) might modify your class files
     84   at runtime. Please see the chapter about <a href="classids.html"> class
     85   ids</a> for a detailed discussion.
     86 </p>
     87 
     88 <h3>Why are Java interface types not shown in the coverage reports?</h3>
     89 <p>
     90   Java interface methods do not contain code, therefore code coverage cannot
     91   be evaluated. Indeed code coverage is recorded for the implementation classes.
     92   The same applies to abstract methods in abstract classes.
     93 </p>
     94 
     95 <h3>Can I collect coverage information without stopping the JVM?</h3>
     96 <p>
     97   Yes, there are two possible ways: The JaCoCo <a href="agent.html">agent</a>
     98   can be configured for remote control via TCP/IP sockets. This allows to
     99   collect execution data at any point in time from a running JVM. The
    100   <a href="ant.html#dump"><code>dump</code> Ant task</a> or the
    101   <a href="dump-mojo.html"><code>dump</code> Maven goal</a> can be used to
    102   request dumps. The remote control feature also allows you to reset execution
    103   data.
    104 </p>
    105 <p>
    106   Alternatively the JaCoCo <a href="agent.html">agent</a> can be configured to
    107   expose some functionality via JMX (<code>jmx=true</code>). The bean
    108   <code><a href="./api/org/jacoco/agent/rt/IAgent.html">org.jacoco:type=Runtime</a></code>
    109   provides operations to dump and reset execution data at any point in time.
    110 </p>
    111 
    112 <h3>My code uses reflection. Why does it fail when I execute it with JaCoCo?</h3>
    113 <p>
    114   To collect execution data JaCoCo instruments the classes under test which adds
    115   two members to the classes: A private static field <code>$jacocoData</code>
    116   and a private static method <code>$jacocoInit()</code>. Both members are
    117   marked as synthetic.
    118 </p>
    119 <p>
    120   Please change your code to ignore synthetic members. This is a good practice
    121   anyways as also the Java compiler creates synthetic members in certain
    122   situation.
    123 </p>
    124 
    125 <h3>Why do I get an error while instrumenting certain Java classes?</h3>
    126 <p>
    127   JaCoCo can instrument valid class files only. Class files with syntactical or
    128   semantical error will typically lead to exceptions. In certain areas JaCoCo is
    129   more restrictive then the JVM: JaCoCo expects valid so-called "stackmap
    130   frame" information in class files of version 1.6 or higher. In turn JaCoCo
    131   instrumented classes are expected to conform the specification.
    132 </p>
    133 <p>
    134   Invalid class files are typically created by some frameworks which do not
    135   properly adjust stackmap frames when manipulating bytecode.
    136 </p>
    137 
    138 <h3>Does JaCoCo run on the IBM JRE J9 and WebSphere?</h3>
    139 <p>
    140   It does. To make the JaCoCo agent work please set the VM option
    141   <code>-Xshareclasses:none</code>.
    142 </p>
    143 
    144 <h3>Why do I get a <code>NoClassDefFoundError</code> or
    145     <code>ClassNotFoundException</code> for class
    146     <code>org.jacoco.agent[...]Offline</code>?</h3>
    147 <p>
    148   If you use <a href="offline.html">offline instrumentation</a> the instrumented
    149   classes get a direct dependency on the JaCoCo runtime. Therefore
    150   <code>jacocoagent.jar</code> of the same JaCoCo version must be on the
    151   classpath and accessible from by the instrumented classes. 
    152 </p>
    153 
    154 <h3>Why do I get a <code>StackOverflowError</code> during code coverage analysis?</h3>
    155 <p>
    156   There are two known reasons for this:
    157 </p>
    158 <ul>
    159   <li>Misconfiguration: If you configure two JaCoCo agents of different releases
    160       they will instrument each other and cause a endless recursion. Check the
    161       effective java command line and avoid such configurations.</li>
    162   <li>Heavy stack usage: JaCoCo instrumentation adds a small runtime overhead
    163       by adding a local variable to each method. If your application is already
    164       close to the maximum stack size this can eventually lead to an
    165       <code>StackOverflowError</code>. Increase the maximum java stack size with
    166       the <code>-Xss</code> JVM option.</li>
    167 </ul>
    168 
    169 </div>
    170 <div class="footer">
    171   <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
    172   <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
    173 </div>
    174 
    175 </body>
    176 </html>
    177