我将jacocoagent.jar0.8.1 版作为 Java 代理传递,以将服务器上的代码覆盖率记录到我的服务器启动脚本中。但是我看到 jar 中缺少 Pre-main 类属性,因此,我收到以下错误:
Error occurred during initialization of VM
Failed to find Premain-Class manifest attribute in
/u01/jetty_home/jacoco/jacocoagent.jar
agent library failed to init: instrument.
Run Code Online (Sandbox Code Playgroud)
有没有人有关于如何解决这个问题的想法?
JaCoCo 只输出 jacococ.exec,这是声纳的输入。在那个文件中,似乎只有信息:
- Class name
- Total Class Probes
- Executed Class Probes
Run Code Online (Sandbox Code Playgroud)
但是,SonarQube 不能仅仅依赖于这些值,因为它需要告诉您哪些是未转换的确切行,因此 Sonar 正在对其自身进行分析。那么它是如何使用 Jacoco 报告的呢?为什么需要它?
在我们将 SonarQube 升级到 后Version 7.9.2 (build 30863), Community Edition,运行 GitLab CI Pipeline 会导致显示0.0%覆盖率(从 about 下降86.2%),尽管 Sonar 显示了所有单元测试。
执行的 Maven 构建.gitlab-ci.yml如下所示:
- mvn test sonar:sonar -Dsonar.host.url=${SONAR_HOST_URL} -Dsonar.login=${SONAR_TOKEN}
Run Code Online (Sandbox Code Playgroud)
sonar.coverage.jacoco.xmlReportPaths显然,这与臭名昭著的 Sonar-JaCoCo 插件设置有关sonar.jacoco.reportPaths(请参阅https://docs.sonarqube.org/pages/viewpage.action?pageId=1442166)。
查看管道作业日志后,我发现以下内容(项目名称混淆为myProject):
SonarQube 升级之前:
[INFO] Sensor JaCoCo XML Report Importer [jacoco]
[INFO] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=3ms
[INFO] Sensor SurefireSensor [java]
[INFO] parsing [/builds/myProject/target/surefire-reports]
[INFO] Sensor SurefireSensor [java] (done) | time=87ms
[INFO] Sensor …Run Code Online (Sandbox Code Playgroud) 我们正在使用 springboot、Jacoco 和 azure devops,如果代码覆盖率低于 70%,我们需要中断管道,我如何使用 azure pipeline 来实现这一点。请建议。
jacoco azure-devops azure-pipelines azure-devops-server-2019
我有一个配置了jacoco插件的Gradle项目来报告测试代码的覆盖范围.我的单元测试是用Spock框架编写的.
虽然Jacoco插件生成HTML报告,但它会将所有类的代码覆盖率报告为0%.
我google了很多,找不到我想念的东西.有没有人使用Gradle + Jacoco进行Spock代码覆盖?
apply plugin: "jacoco"
apply plugin: "groovy"
sourceSets {
main {
java { srcDirs = ['src/main/java'] }
groovy {srcDirs = ['src/main/groovy'] }
resources { srcDir 'src/main/resources' }
}
test {
java { srcDirs = ['src/test/java'] }
groovy { srcDirs = ['src/test/groovy'] }
resources { srcDir 'src/test/resources' }
}
}
test {
jvmArgs '-Xms64m', '-Xmx2G', '-XX:MaxPermSize=128m'
}
jacocoTestReport {
reports {
xml.enabled false
csv.enabled false
html.destination "${buildDir}/jacocoHtml"
}
}
dependencies {
testCompile "org.spockframework:spock-core:0.7-groovy-2.0"
testCompile "org.spockframework:spock-spring:0.7-groovy-2.0"
}
Run Code Online (Sandbox Code Playgroud) 当我在实时应用程序上执行某些场景时,即当应用程序在服务器中运行时,我想获得代码覆盖率报告(或跟踪应用程序的控制器流程),因此我参考了官方Jacoco 文档并按照以下方式执行
第一步,我尝试将 jacoco 代理绑定到应用程序运行端口
export MAVEN_OPTS=-javaagent:/home/user/.m2/repository/org/jacoco/org.jacoco.agent/0.7.4.201502262128/org.jacoco.agent-0.7.4.201502262128-runtime.jar=includes=*,output=tcpserver,port=6300,address=*,dumponexit=true
Run Code Online (Sandbox Code Playgroud)
然后我启动了服务器并执行了一些测试场景,当时我还请求 jacoco 通过执行以下命令来获取转储
mvn jacoco:dump
Run Code Online (Sandbox Code Playgroud)
当我首先执行上面的命令时,它显示如下java.net.BindException: Address already in use,然后它打印为休闲
[INFO] Connecting to localhost/127.0.0.1:6300
Run Code Online (Sandbox Code Playgroud)
当我停止服务器时,在我请求通过执行以下命令生成 jacoco 报告后,jacoco.exec已生成到已知位置
mvn jacoco:report
Run Code Online (Sandbox Code Playgroud)
最后我收到了报告,但当我打开 index.html 页面时,它显示了0%覆盖范围。
您可以通过以下示例 Spring MVC 项目重现我的困难
请从 Github下载 Spring MVC 项目https://github.com/mkyong/spring4-mvc-ajax-example
就我而言,我使用 WildFly 8.x 服务器来运行项目并将以下依赖项添加到下载的项目 pom.xml
maven-surefire-plugin of 2.19.1 version
jacoco-maven-plugin of 0.7.4.201502262128 version
junit of 4.12 version
Run Code Online (Sandbox Code Playgroud)
然后使用以下命令清理并构建项目。
mvn clean install
Run Code Online (Sandbox Code Playgroud)
完成后,从项目的目标文件夹中获取 .war 文件并将其保存在 wildflyserverwildfly-9.0.0.CR2/standalone/deployments/文件夹中
部署 .war 后,转到/wildfly-9.0.0.CR2/bin/文件夹并执行/运行该./standalone.sh文件,或者根据平台,您可以运行该 …
在我的 gradle 项目中,我没有jacocoTestReport.xml 使用jacoco.xml. jacoco.xml和 之间有什么区别jacocoTestReport.xml?
在 Google 上,这两个文件之间的区别尚不清楚。
PS:我问的原因是Code Climate需要一个jacoco.xml代码覆盖率文件。