我知道有很多关于 Sonar 和 Jacoco 没有正确生成报告的问题,但没有一个能帮助我解决我的问题:
这是交易:
我有一个项目使用 Cobertura 来计算代码覆盖率,但我无法更改。Sonar 必须将 Cobertura 用于服务器端。但另一方面,我有这个客户端(我们正在谈论在 java 中使用 smartGWT 的 web 应用程序),它使用 Selenium RC 进行了测试(因为这是测试 smartGWT 的唯一方法)。
Cobertura 无法计算 Selenium 测试的覆盖率,因为这些测试是在已部署的应用程序上完成的。Jacoco 可以计算出来,因为它是作为 java 代理启动的。所以在我的电脑上一切正常。jacoco.exec 生成成功。但似乎 Sonar 无法找到如何读取该文件,或者可能只是 cobertura 和 jacoco 有冲突......
这是 Jenkins 生成的错误:
[INFO] Surefire report directory: D:\JENKINS-SONAR\jobs\agepro PROTO\workspace\target\surefire-reports
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:323)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:338)
Caused by: java.io.FileNotFoundException: D:\JENKINS-SONAR\jobs\agepro (Accès refusé)
at java.io.FileOutputStream.openAppend(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:177)
at org.jacoco.agent.rt_9w37ty.controller.LocalController.startup(LocalController.java:46)
at org.jacoco.agent.rt_9w37ty.JacocoAgent.init(JacocoAgent.java:83)
at org.jacoco.agent.rt_9w37ty.JacocoAgent.premain(JacocoAgent.java:165)
... 6 more
FATAL ERROR in native method: processing of -javaagent failed
Exception in thread "main"
这是我对surefire插件的配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-javaagent:${sonar.jacoco.jar}=destfile=${sonar.jacoco.reportPath}</argLine>
<excludes>
<exclude>**/Selenium*.java</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>surefire-integration-test</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<!-- <argLine>-javaagent:${sonar.jacoco.jar}=destfile=${sonar.jacoco.reportPath}</argLine> -->
<excludes>
<exclude>none</exclude>
</excludes>
<includes>
<include>**/Selenium*.java</include>
</includes>
<goal>selenium-test</goal>
</configuration>
</execution>
</executions>
</plugin>
你看到我可能犯的任何错误吗?或者也许我必须为 jacoco jar 或其他东西设置另一条路径?还是要谢谢你的帮助。