在较旧的 SO 问题的帮助下,设法让一切正常工作。
我们从这篇文章开始,它为我们提供了使用 EMMA 的示例覆盖设置。然而,我们似乎需要在我们想要获取覆盖数据的每个插件上强制依赖 EMMA。
一些谷歌取证让我们看到了这本书的摘录,它相当充分地涵盖了 OSGi 类加载器层次结构。通过osgi.parentClassloader=app将这一行添加到测试运行应用程序的 config.ini 中,我们可以在命令行上指定一个类路径。该类路径需要包括:
- 日食的
startup.jar 
- 应用程序使用的 Java SDK jar
 
- 覆盖工具的罐子
 
当然,我们是通过<java jar="foo.jar">Ant 任务运行测试的,它会默默地忽略您提供的任何类路径信息并仅使用 jar。在我们让 Emma 工作之后,我们切换到 Cobertura,我们最终的 Ant 脚本(略微删节和匿名化)看起来像:
<target name="generate.coverage" depends="buckminster.init">
  <!-- Generate the classpath. -->
  <path id="cobertura.classpath">
    <fileset dir="${tasks.dir}/lib/cobertura">
      <include name="cobertura.jar" />
      <include name="**/*.jar" />
    </fileset>
  </path>
  <taskdef classpathref="cobertura.classpath" resource="tasks.properties" />
  <!-- Get ready to run the unit tests app, and delete old coverage data. -->
  <unzip src="${test-app.artifact}" dest="${output.dir}" overwrite="true" />
  <delete file="${output.dir}/cobertura.ser" />
  <!-- Instrument the jars in-place. Make sure to only capture what you want instrumented! -->
  <cobertura-instrument datafile="${output.dir}/cobertura.ser">
    <fileset dir="${output.dir}/test-app/plugins">
      <include name="**/*our.company_*.jar" />
    </fileset>
  </cobertura-instrument>
  <!-- Run the unit test application, by classname rather than by jar. -->
  <java fork="true" classname="org.eclipse.equinox.launcher.Main" logerror="true" failonerror="true" maxmemory="1G">
    <classpath>
      <pathelement location="${output.dir}/test-app/startup.jar" />
      <pathelement location="${tasks.dir}/lib/cobertura/cobertura.jar" />
      <fileset dir="${tasks.dir}/lib/cobertura">
        <include name="**/*.jar" />
      </fileset>
      <pathelement location="${java.class.path}" />
    </classpath>
    <sysproperty key="net.sourceforge.cobertura.datafile" file="${output.dir}/cobertura.ser" />            
    <arg value="-data" />
    <arg value="${output.dir}/test-app/workspace" />
    <arg value="--formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter:${log.dir}/test-results.xml" />
  </java>
  <!-- Generate the coverage reports. -->
  <cobertura-report format="html" datafile="${output.dir}/cobertura.ser" destdir="${output.dir}/cobertura-report">
    <fileset dir="${workspace.dir}/plugins">
      <include name="**/*.java" />
    </fileset>
  </cobertura-report>
</target>
希望这可以帮助与我们在同一个地方的人。