Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
553 views
in Technique[技术] by (71.8m points)

Jacoco coverage with Ant throws java.lang.instrument.IllegalClassFormatException: Error while instrumenting class

I integrated Jacoco with my Ant build. When I run the build, the test case is executed successfully followed by the below exception in my TEST-com.worker.ManagerTest.xml. When I add excludes="*" the error is not thrown. But the jacoco.exec is generated with 1kb size and when I run the report nothing is generated. Can someone let me know what am I missing?

Exception:

<![CDATA[java.lang.instrument.IllegalClassFormatException: Error while instrumenting class com/dataaccess/GenericDao. at org.jacoco.agent.rt_6qyg3i.CoverageTransformer.transform(CoverageTransformer.java:69)

Below is the jacoco build script.

<target name="test"  depends="test-compile">
    <mkdir dir="${report.dir}" />
    <jacoco:coverage destfile="${report.dir}/jacoco.exec"  xmlns:jacoco="antlib:org.jacoco.ant" exclclassloader="sun.reflect.DelegatingClassLoader:javassist.Loader">
        <junit fork="true" forkmode="once" printsummary="on">
        <classpath>
            <!--<pathelement location="${basedir}/../../../build/lib/aspectjtools.jar"/>
            <pathelement location="${basedir}/../../../build/lib/aspectjrt.jar"/>-->
            <pathelement path="${test.path}" />
            <pathelement path="${dist.dir}/test/unittest-manager.jar" />
        </classpath>
        <formatter type="xml" />
        <batchtest todir="${report.dir}"  fork="yes">
            <fileset dir="test">
                <include name="**/*Test*" />
            </fileset>
        </batchtest>
    </junit>
    </jacoco:coverage>
    </target>

<target name="report"  depends="test">
    <echo message="Generating Jacoco reports..." />
    <property name="report.dir.file" value="${report.dir}/jacoco.exec"/>
                    <jacoco:report>
                        <executiondata>
                            <file file="${report.dir.file}"/>
                        </executiondata>
                        <structure name="JaCoCo Reports">
                            <classfiles>
                                <fileset dir="${dist.dir}/applications/lib/manager.jar">
                                       <include name="**/*.class"/>
                                </fileset>
                            </classfiles>
                            <sourcefiles encoding="UTF-8">
                                <fileset dir="${src.dir}">
                                 <include name="**/*.java"/>
                                </fileset>
                            </sourcefiles>
                        </structure>
                    <html destdir="${report.dir}/coverage"/>
                    </jacoco:report>
</target>

This is the empty report I get. enter image description here

Regards, Sat


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

I used the latest version 0.8.7 and it worked.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...