Jacoco - “引起:java.lang.ClassNotFoundException:org.jacoco.agent.rt.internal_6da5971.Offline”

时间:2016-10-16 06:18:59

标签: maven jacoco maven-surefire-plugin jacoco-maven-plugin

尝试使用离线检测通过jacoco进行覆盖(不能使用即时检测:由于powermock测试用例)用于maven项目。在surefire插件中将jacocoagent.jar添加到classpath,如下所示。将“org.jacoco.agent-0.7.7.201606060606-runtime.jar”(从本地maven存储库)重命名为“jacocoagent.jar”并将其保存在此pom.xml所在的同一文件夹中。我在下面点击甚至在将其添加到类路径后也是例外。

pom.xml片段(surefire - 插件配置)

       <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-surefire-plugin</artifactId>
             <configuration>
                     <forkmode>once</forkmode>
                    <additionalClasspathElements>
            <additionalClasspathElement>jacocoagent.jar</additionalClasspathElement>
                                        </additionalClasspathElements>
              </configuration>
     </plugin>

在控制台上看到异常:

#############
Number of foreign imports: 1
import: Entry[import  from realm ClassRealm[maven.api, parent: null]]

-----------------------------------------------------

        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:166)
        ... 21 more
Caused by: java.lang.NoClassDefFoundError: org/jacoco/agent/rt/internal_6da5971/Offline
        at com.cisco.ise.ups.modelframework.hibernate.OracleNamingStrategy.$jacocoInit(OracleNamingStrategy.java)
        at com.cisco.ise.ups.modelframework.hibernate.OracleNamingStrategy.<clinit>(OracleNamingStrategy.java)
        at sun.misc.Unsafe.ensureClassInitialized(Native Method)
        at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:43)
        at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:142)
        at java.lang.reflect.Field.acquireFieldAccessor(Field.java:1082)
        at java.lang.reflect.Field.getFieldAccessor(Field.java:1063)
        at java.lang.reflect.Field.get(Field.java:387)
        at com.cisco.ise.ups.build.WorkflowRunnerMojo.namingStrategyInstance(WorkflowRunnerMojo.java:335)
        at com.cisco.ise.ups.build.WorkflowRunnerMojo.setupWorkflowEnvironment(WorkflowRunnerMojo.java:514)
        at com.cisco.ise.ups.build.WorkflowRunnerMojo.execute(WorkflowRunnerMojo.java:816)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
        ... 21 more
Caused by: java.lang.ClassNotFoundException: org.jacoco.agent.rt.internal_6da5971.Offline
        at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
        ... 33 more
[ERROR]
###############

遵循的步骤:

  1. “mvn compile”。
  2. “mvn org.jacoco:jacoco-maven-plugin:instrument”
  3. “mvn test” - 此步骤引发异常。
  4. 请告诉我如何摆脱这种异常?那是添加类路径的正确位置吗? (在surefire插件中)或者应该在哪里指定??

    谢谢。

1 个答案:

答案 0 :(得分:1)

获得Sonar + JaCoCo + PowerMock的

dr. macphail's trance article为我做了这个工作:

Values in the KV store cannot be larger than 512kb.

正如博文的评论部分所述:

  

如果您的默认argLine不是“简单”,您可能需要使用以下代码段:

     

{argLine} -XX:-UseSplitVerifier

     

否则您可能会遇到ClassNotFoundException - 例如java.lang.ClassNotFoundException:org.jacoco.agent.rt.RT