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