Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant 带有JDK 1.6.0_35的Cobertura 2.0.3未能对类进行仪表化_Ant_Cobertura - Fatal编程技术网

Ant 带有JDK 1.6.0_35的Cobertura 2.0.3未能对类进行仪表化

Ant 带有JDK 1.6.0_35的Cobertura 2.0.3未能对类进行仪表化,ant,cobertura,Ant,Cobertura,我试图通过ant运行cobertura,使用jdk1.6.0.35,但在检测时遇到异常。如何解决? 异常消息如下所示: [cobertura-instrument] [12/06 13:19:26] [WARN] CoberturaInstrumenter: Unable to instrument file D:\workcontext\niyong_crm_v1_0\crm\code\ulcif\web\WEB-INF\classes\com\ulic\ulcif\ws\service\im

我试图通过ant运行cobertura,使用jdk1.6.0.35,但在检测时遇到异常。如何解决? 异常消息如下所示:

[cobertura-instrument] [12/06 13:19:26] [WARN] CoberturaInstrumenter: Unable to instrument file D:\workcontext\niyong_crm_v1_0\crm\code\ulcif\web\WEB-INF\classes\com\ulic\ulcif\ws\service\impl\CustomerCIImpl.class
[cobertura-instrument] java.lang.IncompatibleClassChangeError: net/sourceforge/cobertura/instrument/pass1/DetectIgnoredCodeClassVisitor
[cobertura-instrument]  at net.sourceforge.cobertura.instrument.CoberturaInstrumenter.instrumentClass(CoberturaInstrumenter.java:149)
[cobertura-instrument]  at net.sourceforge.cobertura.instrument.CoberturaInstrumenter.instrumentClass(CoberturaInstrumenter.java:121)
[cobertura-instrument]  at net.sourceforge.cobertura.instrument.CoberturaInstrumenter.addInstrumentationToSingleClass(CoberturaInstrumenter.java:234)
[cobertura-instrument]  at net.sourceforge.cobertura.instrument.Main.addInstrumentationToSingleClass(Main.java:298)
[cobertura-instrument]  at net.sourceforge.cobertura.instrument.Main.addInstrumentation(Main.java:307)
[cobertura-instrument]  at net.sourceforge.cobertura.instrument.Main.parseArguments(Main.java:399)
[cobertura-instrument]  at net.sourceforge.cobertura.instrument.Main.main(Main.java:421)

您是否已将Cobertura添加到ant任务中

见:

我的看起来像这样:

    <target name="process-classes" depends="compile" description="post-process the generated files from compilation, for example to do bytecode enhancement on Java classes.">
        <path id="cobertura.auxpath">
              <pathelement path="${target.dir}/classes"/>
              <pathelement location="classes"/>
        </path>

        <mkdir dir="${target.dir}/cobertura-ser" />
        <mkdir dir="${target.dir}/cobertura-classes" />

        <!-- Copy all the files into the file that eventually get's built into the instrumented JAR -->
        <copy todir="${target.dir}/cobertura-classes">
            <fileset dir="${target.dir}/classes" /> 
        </copy>

        <!-- Instrument all the classes in place -->
        <cobertura-instrument todir="${target.dir}/cobertura-classes" 
            datafile="${target.dir}/cobertura-ser/cobertura.ser" 
            classpathref="cobertura.path">
            <fileset dir="${target.dir}/classes" >
                 <include name="**/*.class" />
                 <exclude name="**/*Test.class" />
            </fileset>
            <auxClasspath>
              <path refid="cobertura.auxpath" />
            </auxClasspath>
        </cobertura-instrument> 
    </target>

我通过将asm-3.3.1更改为asm-all-5.0.4解决了这个问题。

来自:

“这是因为在cobertura 2.0的插装过程中,我们使用ASM来重建.class文件。我们重新构建了stackmap,这是与Java7及以后任何版本兼容的要求。这并不意味着我们要重新编译代码,但是ASM要求我们提供其他类的二进制文件,以防它需要查找任何超级方法。为了解决这个问题,我们使用了一个名为auxClasspath的参数。”

您需要有asm、asm分析、asm公用程序、asm树和asm util JAR

另外,在ant文件(build.xml)中添加auxpath应该可以解决这个问题。 尝试添加以下代码:

<path id="cobertura.auxpath">
<pathelement location="${bin}"/>
    </path>

    <target name="instrument_coverage" depends="init_coverage"
        description="Instruments source code for coverage measurement">
        <cobertura-instrument datafile="${coverage.datafile}">
            <fileset refid="coverage-files"/>
        <auxClasspath>
              <path refid="cobertura.auxpath" />
            </auxClasspath>
        </cobertura-instrument>
    </target>

这对我有用