当前位置: 首页 > 知识库问答 >
问题:

雅各布 - “由:java.lang.类不发现例外:org.jacoco.agent.rt.internal_6da5971。离线”

汪博艺
2023-03-14

尝试通过jacoco为maven项目使用离线检测(由于powermock测试用例,无法使用即时检测)获得覆盖率。提花剂补充道。surefire插件中的jar到类路径,如下所示。将“org.jacoco.agent-0.7.7.201606060606-runtime.jar”(从本地maven存储库)重命名为“jacocoagent.jar”,并将其保存在该pom所在的同一文件夹中。xml正在驻留。即使在将其添加到classpath之后,我还是遇到了下面的异常。

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编译”。
  2. “mvn-org.jacoco:jacoo-maven-plugin:instrument”
  3. “mvn test”-此步骤中出现异常

请让我知道如何摆脱这个异常?这是添加类路径的正确位置吗??(在surefire插件中)还是应该在某个地方指定??

谢谢。

共有2个答案

邢和光
2023-03-14

Macphail博士关于获得声纳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>

如博文评论区所述:

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

{argLine} -XX:-UseSplitVerifier

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

马星阑
2023-03-14

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

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

请确保不要错过“分类器”部分,否则它将无法工作。

PowerMock项目的完整示例

 类似资料:
  • 我在Jenkins有一个项目,我想创建一个JaCoCo代码覆盖率报告。如果我在本地运行,那么它会在中创建正确的文件(.exec、.classes和sources),因此它可以工作。 然而,当在jenkins上构建时,这只会创建类目录,这意味着它拾取代码而不是覆盖它的测试,所以我得到0%的代码覆盖率。 有人用这种方式让Jacoco和sbt合作吗?

  • 在我的项目中,我有这样一个枚举: 我有这个代码: 我有个例外 myMap由数据库中的数据填充,知道它是SQL Server数据库,并且从数据库返回的myKey在数据库中是tinyint类型。 你能告诉我我做错了什么吗?谢谢 当做

  • 本文向大家介绍Spring Cloud 优雅下线以及灰度发布实现,包括了Spring Cloud 优雅下线以及灰度发布实现的使用技巧和注意事项,需要的朋友参考一下 前言 在生产环境中,如何保证在服务升级的时候,不影响用户的体验,这个是一个非常重要的问题。如果在我们升级服务的时候,会造成一段时间内的服务不可用,这就是不够优雅的。那什么是优雅的呢?主要就是指在服务升级的时候,不中断整个服务,让用户无感

  • 在我的Android项目中,雅各布不包括机器人测试。我可以得到机器人浓缩咖啡和junit测试覆盖与哈科没有任何问题。 我确实看到了有关此问题的其他问题,所有答案都是升级jaco版本。我使用的是最新的雅各科版本 0.7.9 这是我的项目main 应用程序模块构建梯度。

  • 我的JUnit测试覆盖范围在jenkins上构建时不会传播到声纳。声纳上的“单元测试覆盖范围”字段保持空白,但“单元测试成功”字段显示正确的值。我正在使用jacoco进行测试覆盖。在jenkins上,jacoco的报告运行良好,并在生成的html中显示了正确的覆盖率。我就是不能把它送到声纳上。 使用jenkins的Jacoco插件,我使用以下参数调用独立的声纳分析。 路径和蚁任务是正确的。也许我错

  • 异常:“字符串”类型不是“映射”类型的子类型 这是上面的json,我只想把它放在用户pojo类中的[data]。 但它抛出了上述异常类型。 用户Pojo类 为了清晰起见,我推荐了这个中等规模的网站 但在4个多小时的静脉注射中,我不知道发生了什么。如果要更改用户。从()到字符串,然后就可以了。但我需要将[data]从json解析到用户pojo类。