8

我试图让Cobertura在我的 ant 脚本中运行,但我一开始就被卡住了。当我尝试插入 cobertura taskdef时,我错过了 Log4J 库。

Ant 属性和类路径

<property name="cobertura.dir" location="/full/path/to/cobertura-1.9.3" />
<path id="cobertura.classpath">
    <fileset dir="${cobertura.dir}">
        <include name="cobertura.jar" />
        <include name="lib/**/*.jar" />
    </fileset>
</path>
<taskdef classpathref="cobertura.classpath" resource="tasks.properties" />

我的蚂蚁目标

<!-- ================================= 
      target: cobertura              
     ================================= -->
<target name="cobertura" depends="clean, init" description="Generates cobertura coverage reports">
    <cobertura-instrument todir="${dir.build.instrumented}">
        <fileset dir="${dir.build}">
            <include name="**/*.class" />
        </fileset>
    </cobertura-instrument>
</target>

我想我所做的一切都像Cobertura 文档中描述的那样,但我明白了

蚂蚁构建错误

BUILD FAILED
build.xml:95: java.lang.NoClassDefFoundError: org/apache/log4j/Logger

${cobertura.dir}中有包含所有文件的lib目录。我将它从 cobertura 发行版 ZIP 中直接解压缩到该目录中。

我错过了一步吗?到目前为止我的配置有问题吗?

4

6 回答 6

10

我今天也遇到了这个问题,并通过将所有必需库的位置指定为提供给我的 taskDef 任务的类路径的一部分来解决它。

<path id="cobertura.class.path">
    <pathelement location="${common.dir}/../tools/cobertura/cobertura.jar" />
    <pathelement location="${common.dir}/../tools/cobertura/lib/asm-3.0.jar" />
    <pathelement location="${common.dir}/../tools/cobertura/lib/asm-tree-3.0.jar" />
    <pathelement location="${common.dir}/../tools/cobertura/lib/log4j-1.2.9.jar" />
    <pathelement location="${common.dir}/../tools/cobertura/lib/jakarta-oro-2.0.8.jar" />
</path>

<taskdef classpathref="cobertura.class.path" resource="tasks.properties" />
于 2011-05-04T14:42:25.567 回答
2

转到您的 ant/lib 目录并确保那里没有文件 cobertura.jar。如果它在那里 - 删除它并重试。

于 2011-03-29T10:33:31.453 回答
1

改变这个

<include name="lib/**/*.jar" />

<include name="*.jar" />

希望这可以帮助!

于 2012-07-30T09:19:43.597 回答
0

我刚刚升级到最新的 cobertura,我的工作正常。CLASSPATH 上是否有其他东西可能使用不同版本的 log4j,所以它选择了错误的?

于 2009-11-21T09:03:46.640 回答
0

我也遇到了这个问题,我只是在类路径中添加了所有用 cobertura 提供的罐子来解决这个问题

于 2011-08-19T14:07:32.447 回答
0

确保 taskdef 和 cobertura-instrument 中使用的类路径相同。这帮助我解决了同样的问题。

于 2011-05-24T13:12:58.040 回答