Maven 雅科科——”;原因:java.lang.ClassNotFoundException:org.jacoco.agent.rt.internal_6da5971.Offline“;

Maven 雅科科——”;原因:java.lang.ClassNotFoundException:org.jacoco.agent.rt.internal_6da5971.Offline“;,maven,jacoco,maven-surefire-plugin,jacoco-maven-plugin,Maven,Jacoco,Maven Surefire Plugin,Jacoco Maven Plugin,试图通过jacoco为maven项目使用离线插装(由于powermock测试用例,无法使用动态插装)获得覆盖率。将jacocoagent.jar添加到surefire插件中的类路径,如下所示。将“org.jacoco.agent-0.7.7.2016060606-runtime.jar”(来自本地maven存储库)重命名为“jacocoagent.jar”,并将其保存在pom.xml所在的同一文件夹中。即使将其添加到类路径中,我仍遇到以下异常 pom.xml的片段(surefire-插件配置)

试图通过jacoco为maven项目使用离线插装(由于powermock测试用例,无法使用动态插装)获得覆盖率。将jacocoagent.jar添加到surefire插件中的类路径,如下所示。将“org.jacoco.agent-0.7.7.2016060606-runtime.jar”(来自本地maven存储库)重命名为“jacocoagent.jar”,并将其保存在pom.xml所在的同一文件夹中。即使将其添加到类路径中,我仍遇到以下异常

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


org.apache.maven.plugins
maven surefire插件
一旦
jacocoagent.jar
控制台上出现异常:

#############
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
导入:条目[import from realm ClassRealm[maven.api,parent:null]]
-----------------------------------------------------
位于org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:166)
... 还有21个
原因:java.lang.NoClassDefFoundError:org/jacoco/agent/rt/internal_6da5971/Offline
在com.cisco.ise.ups.modelframework.hibernate.OracleNamingStrategy.$jacoconit(OracleNamingStrategy.java)
位于com.cisco.ise.ups.modelframework.hibernate.OracleNamingStrategy.(OracleNamingStrategy.java)
在sun.misc.Unsafe.EnsureClassified(本机方法)
位于sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:43)
位于sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:142)
位于java.lang.reflect.Field.acquireFieldAccessor(Field.java:1082)
位于java.lang.reflect.Field.getFieldAccessor(Field.java:1063)
位于java.lang.reflect.Field.get(Field.java:387)
位于com.cisco.ise.ups.build.WorkflowRunnerMojo.namingStrategyInstance(WorkflowRunnerMojo.java:335)
位于com.cisco.ise.ups.build.WorkflowRunnerMojo.setupWorkflowEnvironment(WorkflowRunnerMojo.java:514)
位于com.cisco.ise.ups.build.WorkflowRunnerMojo.execute(WorkflowRunnerMojo.java:816)
位于org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
... 还有21个
原因:java.lang.ClassNotFoundException:org.jacoco.agent.rt.internal_6da5971.Offline
位于org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
位于org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
位于org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247)
位于org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
... 33多
[错误]
###############
接下来的步骤:

#############
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]
###############
  • “mvn编译”
  • “mvn org.jacoco:jacoco maven插件:仪器”
  • “mvn测试”-此步骤引发异常
  • 请让我知道如何处理此异常?那是添加类路径的正确位置吗??(在surefire插件中)还是应该在某些地方指定

    谢谢。

    在获得Sonar+JaCoCo+PowerMock后,我完成了这项工作:

      <!-- Provide information for coverage per test -->
      <profile>
         <id>coverage-per-test</id>
         <build>
            <plugins>
               <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-surefire-plugin</artifactId>
                  <version>2.20</version>
                  <configuration>
                     <argLine>${argLine} -Xverify:none</argLine>
                     <properties>
                        <property>
                           <name>listener</name>
                           <value>org.sonar.java.jacoco.JUnitListener</value>
                        </property>
                     </properties>
                  </configuration>
               </plugin>
            </plugins>
         </build>
    
         <dependencies>
            <dependency>
               <groupId>org.sonarsource.java</groupId>
               <artifactId>sonar-jacoco-listeners</artifactId>
               <version>4.9.0.9858</version>
               <scope>test</scope>
            </dependency>
         </dependencies>
      </profile>
    
    
    每次测试的覆盖率
    org.apache.maven.plugins
    maven surefire插件
    2.20
    ${argLine}-Xverify:无
    听众
    org.sonar.java.jacoco.JUnitListener
    org.sonarsource.java
    声纳jacoco监听器
    4.9.0.9858
    测试
    
    如博客评论部分所述:

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

    {argLine}-XX:-UseSplitVerifier

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


    surefire插件上的类路径内容不是必需的。您需要向每个具有测试的模块添加依赖项,如下所示:

    <dependency>
        <groupId>org.jacoco</groupId>
        <artifactId>org.jacoco.agent</artifactId>
        <classifier>runtime</classifier>
        <scope>test</scope>
        <version>${your.jacoco.version}</version>
    </dependency>
    
    
    org.jacoco
    

    我敢打赌,如果有必要为测试添加库,应该在pom的
    部分指定它们,scope=test。@LittleSanti:根据建议调整了pom.xml。问题(例外)仍然存在。在选项卡下添加了这些行。org.jacoco)。不确定,还缺什么!!!我懂了。好。。。我想到的另一个解决方案是在插件的依赖项中设置该依赖项,因为插件的类加载器可能与测试代码的类加载器不同。@LittleSanti:在上面的代码片段中,它已经在中提到过。正确的?您能告诉我如何在maven pom.xml中添加类路径吗?基本上,在这种情况下,命令如下所示:(ps aux | grep java的O/P)jre/bin/java-javaagent:/root/.m2/repository/org/jacoco/org.jacoco.agent/0.7.7.2016060606/org.jacoco.agent-0.7.7.2016060606-runtime.jar=destfile=target/jacoco.exec-jar target/surefire/surefirebooter5305632.jar唯一我知道在pom.xml中将jar添加到类路径的方法有前面提到的两种:
    依赖项
    节点和
    插件/pugin/dependencies
    节点。