cobertura-instrument.sh无法使用java.lang.NoClassDefFoundError检测jar文件:net.sourceforge.cobertura.instrument.InstrumentMain

时间:2016-04-07 13:39:46

标签: java code-coverage cobertura

我正在尝试检测jar文件(来自Spacewalk项目),这样我就可以测量矿山测试的代码覆盖率,但它失败了:

# /opt/cobertura-2.1.1/cobertura-instrument.sh --datafile /tmp/out /usr/share/rhn/lib/rhn.jar
Exception in thread "main" java.lang.NoClassDefFoundError: net.sourceforge.cobertura.instrument.InstrumentMain
Caused by: java.lang.ClassNotFoundException: net.sourceforge.cobertura.instrument.InstrumentMain
    at java.net.URLClassLoader.findClass(URLClassLoader.java:432)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:676)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:358)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:642)
Could not find the main class: net.sourceforge.cobertura.instrument.InstrumentMain.  Program will exit.

我试图从那个jar中提供一个随机类(在理想状态下我想要测试所有这些),但结果相同:

# jar tf rhn.jar | tail
org/cobbler/CobblerConnection.class
[...]
# /opt/cobertura-2.1.1/cobertura-instrument.sh --datafile /tmp/out /usr/share/rhn/lib/rhn.jar org.cobbler.CobblerConnection

我很确定我只是错过了它试图告诉我的东西。

我正在使用从SourceForge下载的 cobertura-2.1.1 并提取到/opt,在Red Hat Enterprise Linux 6上运行。

1 个答案:

答案 0 :(得分:0)

好的,这很简单:

# dos2unix /opt/cobertura-2.1.1/cobertura-instrument.sh

它也缺少bash shebang(#!/bin/bash),所以你可能需要将它添加到文件的开头(我不知道为什么它对我有用,即使没有它)。