我正在尝试检测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上运行。
答案 0 :(得分:0)
好的,这很简单:
# dos2unix /opt/cobertura-2.1.1/cobertura-instrument.sh
它也缺少bash shebang(#!/bin/bash
),所以你可能需要将它添加到文件的开头(我不知道为什么它对我有用,即使没有它)。