gth*_*thy 5 maven maven-surefire-plugin jacoco jacoco-maven-plugin
尝试使用jacoco的脱机工具获取覆盖范围(由于powermock测试用例,无法使用即时检测工具),将jacocoagent.jar添加到surefire插件的classpath中,如下所示。将“ 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>
Run Code Online (Sandbox Code Playgroud)
在控制台上看到的异常:
#############
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]
###############
Run Code Online (Sandbox Code Playgroud)
遵循的步骤:
请让我知道如何摆脱这个例外?是添加类路径的正确地方吗?(在surefire插件中)还是应该在哪里指定?
谢谢。
surefire插件上的类路径不是必需的。您需要向具有测试的每个模块添加依赖项,如下所示:
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.agent</artifactId>
<classifier>runtime</classifier>
<scope>test</scope>
<version>${your.jacoco.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
确保您不要错过“分类器”部分,否则它将无法正常工作。
小智 3
博士。麦克菲尔的恍惚文章关于获取 Sonar + JaCoCo + PowerMock 的 trance 文章为我完成了这项工作:
\n\n <!-- Provide information for coverage per test -->\n <profile>\n <id>coverage-per-test</id>\n <build>\n <plugins>\n <plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-surefire-plugin</artifactId>\n <version>2.20</version>\n <configuration>\n <argLine>${argLine} -Xverify:none</argLine>\n <properties>\n <property>\n <name>listener</name>\n <value>org.sonar.java.jacoco.JUnitListener</value>\n </property>\n </properties>\n </configuration>\n </plugin>\n </plugins>\n </build>\n\n <dependencies>\n <dependency>\n <groupId>org.sonarsource.java</groupId>\n <artifactId>sonar-jacoco-listeners</artifactId>\n <version>4.9.0.9858</version>\n <scope>test</scope>\n </dependency>\n </dependencies>\n </profile>\nRun Code Online (Sandbox Code Playgroud)\n\n正如博客文章评论部分中提到的:
\n\n\n\n如果您的默认 argLine 不是 \xe2\x80\x9csimple\xe2\x80\x9d 您可能需要使用以下代码片段:
\n\n{argLine} -XX:-UseSplitVerifier
\n\n否则你可能会遇到 ClassNotFoundException \xe2\x80\x93 例如 java.lang.ClassNotFoundException: org.jacoco.agent.rt.RT
\n
| 归档时间: |
|
| 查看次数: |
13410 次 |
| 最近记录: |