【问题标题】:ExceptionInInitializerError using Cobertura 2.0.3, Java 7, and Ant使用 Cobertura 2.0.3、Java 7 和 Ant 的 ExceptionInInitializerError
【发布时间】:2014-09-16 20:24:09
【问题描述】:

我正在尝试在将使用 Cobertura 2.0.3 的 Ant 项目上升级到 Java 7。

build.xml 中的 Cobertura 目标:

<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}/cobertura-classes" >
                <include name="**/*.class" />
            </fileset>
            <auxClasspath>
              <path refid="cobertura.auxpath" />
            </auxClasspath>
        </cobertura-instrument> 
    </target>

我在构建的检测阶段看到 ClassNotFoundException 和 ExceptionInInitializerError。

[cobertura-instrument] Cobertura 2.0.3 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file
[cobertura-instrument] Sep 16, 2014 1:53:50 PM net.sourceforge.cobertura.coveragedata.TouchCollector registerClass
[cobertura-instrument] SEVERE: Exception when registering class: {path}/dao/DefaultDAO
[cobertura-instrument] java.lang.ClassNotFoundException: {path}.dao.DefaultDAO
[cobertura-instrument]  at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
[cobertura-instrument]  at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
[cobertura-instrument]  at java.security.AccessController.doPrivileged(Native Method)
[cobertura-instrument]  at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
[cobertura-instrument]  at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
[cobertura-instrument]  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
[cobertura-instrument]  at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
[cobertura-instrument]  at java.lang.Class.forName0(Native Method)
[cobertura-instrument]  at java.lang.Class.forName(Class.java:266)
[cobertura-instrument]  at net.sourceforge.cobertura.coveragedata.TouchCollector.registerClass(TouchCollector.java:80)
[cobertura-instrument]  at {path}.dao.DefaultDAO.__cobertura_init(DefaultDAO.java)
[cobertura-instrument]  at {path}.dao.DefaultDAO.<clinit>(DefaultDAO.java)
[cobertura-instrument] WARN   instrumentClass, Unable to instrument file C:\code\policy\main\policy-base\target\cobertura-classes\{path}\persistence\cascade\builder\BuildingCascadeBuilder.class
[cobertura-instrument] java.lang.ExceptionInInitializerError
[cobertura-instrument]  at java.lang.Class.forName0(Native Method)
[cobertura-instrument]  at java.lang.Class.forName0(Native Method)      at java.lang.Class.forName(Class.java:266)
[cobertura-instrument]  at java.lang.Class.forName(Class.java:266)
[cobertura-instrument]  at net.sourceforge.cobertura.instrument.CoberturaClassWriter.getCommonSuperClass(CoberturaClassWriter.java:32)
[cobertura-instrument]  at org.objectweb.asm.ClassWriter.a(Unknown Source)
[cobertura-instrument]  at org.objectweb.asm.Frame.a(Unknown Source)
[cobertura-instrument]  at org.objectweb.asm.Frame.a(Unknown Source)
[cobertura-instrument]  at org.objectweb.asm.MethodWriter.visitMaxs(Unknown Source)
[cobertura-instrument]  at org.objectweb.asm.MethodVisitor.visitMaxs(Unknown Source)
[cobertura-instrument]  at org.objectweb.asm.util.CheckMethodAdapter.visitMaxs(Unknown Source)
[cobertura-instrument]  at org.objectweb.asm.MethodVisitor.visitMaxs(Unknown Source)
[cobertura-instrument]  at org.objectweb.asm.commons.LocalVariablesSorter.visitMaxs(Unknown Source)
[cobertura-instrument]  at org.objectweb.asm.tree.MethodNode.accept(Unknown Source)
[cobertura-instrument]  at org.objectweb.asm.util.CheckMethodAdapter$1.visitEnd(Unknown Source)
[cobertura-instrument]  at org.objectweb.asm.MethodVisitor.visitEnd(Unknown Source)

我做错了什么?

【问题讨论】:

    标签: java ant cobertura


    【解决方案1】:

    如果我对此块发表评论,错误将得到解决:

    <fileset dir="${target.dir}/cobertura-classes" >
        <include name="**/*.class" />
    </fileset>
    

    我不知道为什么。如果您知道,请发布答案。

    我明白了:

    process-classes:
        [mkdir] Created dir: C:\code\policy\main\policy-base\target\cobertura-ser
        [mkdir] Created dir: C:\code\policy\main\policy-base\target\cobertura-classes
         [copy] Copying 465 files to C:\code\policy\main\policy-base\target\cobertura-classes
    [cobertura-instrument] Cobertura 2.0.3 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file
    [cobertura-instrument] Sep 16, 2014 4:08:10 PM net.sourceforge.cobertura.coveragedata.CoverageDataFileHandler saveCoverageData
    [cobertura-instrument] INFO: Cobertura: Saved information on 0 classes.  
    

    这是否意味着没有类被检测?

    [编辑] 我改变了这个,并且课程正在被检测。但是我的构建因超时问题而失败。

    <fileset dir="${target.dir}/classes" >
        <include name="**/*.class" />
        <exclude name="**/*Test.class" />
    </fileset>
    

    【讨论】:

      猜你喜欢
      • 2014-06-16
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 2010-12-18
      • 2017-01-25
      • 1970-01-01
      相关资源
      最近更新 更多