SonarQube 7.7 针对 Java 项目分析显示以下警告:
不推荐使用属性“sonar.jacoco.reportPath”(JaCoCo 二进制格式)。应改用“sonar.coverage.jacoco.xmlReportPaths”(JaCoCo XML 格式)。
基于 Gradle 的项目配置sonar-project.properties如下:
sonar.projectKey=MyExampleLib
sonar.projectName=MyExample Library
sonar.sources=src/main/java
sonar.jacoco.reportPath=build/jacoco/test.exec
sonar.junit.reportsPath=build/test-results/test
sonar.java.test.binaries=build/classes/test
sonar.java.binaries=build/classes/java/main
sonar.binaries=build/classes
sonar.projectVersion=$libVersion
Run Code Online (Sandbox Code Playgroud)
SonarQube 服务器 URL 是通过以下方式注入的(否则最终会出现“localhost:9000”错误):
SonarQube 分析通过 Jenkins 和JaCoCo 插件v.3.0.4触发,作业配置如下:
我读到 areport.xml被xmlReportPaths. 我怎样才能生成它?
在 spring 项目中,我使用 jacoco 插件来测量测试覆盖率。
我看到如下 html 报告:
现在我想用这个百分比向 github 项目添加一个徽章,如下所示:
知道如何将 jacoco 与 github 动作结合起来吗?
科特林版本: 1.3.61
Android Gradle 插件: 3.5.3
JaCoCo 版本: 0.8.4.201905082037(默认 android gradle 版本)
项目:https : //github.com/goldy1992/Mp3Player/tree/feature/issue-112/migrate-to-kotlin
我有一个多模块 gradle 项目:2 种风格:完整、自动化 2 种构建类型:发布、调试
我正在将所有内容迁移到 kotlin。
模块结构
对于这篇文章的上下文,我只对单元测试感兴趣
测试按预期运行,但是由于某些(不是全部)kotlin 编译类被识别为“检测类”,因此没有生成覆盖率
错误出现在测试即将进行时,许多类都打印出以下内容:
java.lang.instrument.IllegalClassFormatException: Error while instrumenting com/github/goldy1992/mp3player/client/views/viewholders/MediaPlayerTrackViewHolder.
at org.jacoco.agent.rt.internal_035b120.CoverageTransformer.transform(CoverageTransformer.java:93)
at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at …Run Code Online (Sandbox Code Playgroud) 我在我的一个模块中通过JaCoCo生成AHP报告时遇到了麻烦.构建开始时,我看到JaCoCo正确设置了argLine:
[INFO] jacoco.agent.argLine set to -javaagent:<...>/.m2/repository/org/jacoco/org.jacoco.agent/0.7.2.201409121644/org.jacoco.agent-0.7.2.201409121644-runtime.jar=destfile=<...>/target/jacoco.exec
Run Code Online (Sandbox Code Playgroud)
但是,maven尝试运行JaCoCo时尚未创建.exec:
[INFO] Skipping JaCoCo execution due to missing execution data file:<...>/target/jacoco.exec
Run Code Online (Sandbox Code Playgroud)
在maven跳过JaCoCo执行后,jacoco.exec最终会被创建.因此,如果我在没有清理的情况下重新运行构建,我仍然可以生成AHP报告.
我已经在其他各种问题中看到,我需要小心使用Maven Surefire和JaCoCo.但是,我没有在我的Surefire插件或任何插件中明确使用argLine.我开始怀疑其他插件之一是否像JaCoCo一样自动劫持argLine参数.
以下是使用的所有插件的列表:
我确实在构建输出中看到一条可疑消息:
[INFO] --- maven-compiler-plugin:3.0:compile (default-compile) @ <module> ---
[INFO] Changes detected - recompiling the module!
Run Code Online (Sandbox Code Playgroud)
我不确定这是否相关,但它在跳过消息之前出现了两次,并且没有出现在JaCoCo正常工作的模块中.
有任何想法吗?
*编辑 - 这是jacoco配置
<plugins>
<...>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!--This …Run Code Online (Sandbox Code Playgroud) 我正在使用gradle 4.3.1和jacoco插件,我能够在多模块项目中确保一定程度的代码覆盖率.当我将元素设置为CLASS或PACAKAGE时,这很有用,但我很难理解如何让它适用于模块.
看这里我想我要的是管束或集团,但后来当我去覆盖量下jacoco不破.
以下是我所拥有的适用于包级别覆盖实施的示例:
jacocoTestCoverageVerification {
violationRules {
rule {
// should be element = 'BUNDLE' or 'GROUP'?
element = 'PACKAGE'
limit {
minimum = 0.9
}
includes = ['com.mypackage.*']
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我将元素值更改为BUNDLE时,无论覆盖范围如何,构建都不会失败.我希望能够在模块级别控制期望值.
这是我的gradle版本信息:
------------------------------------------------------------
Gradle 4.3.1
------------------------------------------------------------
Build time: 2017-11-08 08:59:45 UTC
Revision: e4f4804807ef7c2829da51877861ff06e07e006d
Groovy: 2.4.12
Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM: 1.8.0_40 (Oracle Corporation 25.40-b25)
OS: …Run Code Online (Sandbox Code Playgroud) 我一直在通过互联网搜索并询问irc聊天,但他们都没有或没有给出任何答案来试图解决我的问题.
我试图让我的项目JaCoCo在IntellijIDE 上使用,测试将在Jenkins服务器中完成,我已经在我的gradle.build文件中设置了一些设置,JaCoCo但是编译失败说Could not set unknown property 'classDumpFile' for object of type org.gradle.testing.jacoco.plugins.JacocoTaskExtension.
构建文件是这样的:
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'jacoco'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
}
jacoco{
toolVersion = '0.7.6.201602180812'
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
testCompile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.5'
compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.6'
compile group: 'org.json', name: 'json', version: '20180130'
}
test{
jacoco { …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试将 JaCoCo 添加为我的 Spring Boot maven 项目的依赖项,以查看我的单元测试的代码覆盖率。但是,当我运行测试时,它失败并显示错误。
Failed to execute goal org.jacoco:jacoco-maven-plugin:0.8.3:report (report) on project test-rest-service: An error has occurred in JaCoCo report generation. Error while creating report: malformed input around byte 2 -> [Help 1]
Run Code Online (Sandbox Code Playgroud)
所有测试都通过而没有失败,所以这不是问题。
JaCoCo 的依赖项是:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.3</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
生成了 JaCoCo.exec 文件,但我无法打开它来生成报告。我究竟做错了什么?
在我们的项目中,我们使用jacoco-maven-plugin并在构建过程中出现此错误:
[ERROR] Failed to execute goal org.jacoco:jacoco-maven-plugin:0.8.5:check (jacoco-check) on project my-project: Coverage checks have not been met. See log for details.
Run Code Online (Sandbox Code Playgroud)
我知道最好修复覆盖范围等等。但有时我只需要快速构建一个项目。是否有某种参数用于此目的?喜欢mvn clean install -Dskip.jacoco.check=true或其他方式快速跳过此检查?
我正在使用 PDE,并在 build.xml 中编译代码并尝试使用 JaCoCo 和 JUnit 创建覆盖率报告。我注意到它现在确实显示了源文件,即使我sourcefiles在. 为了调试它(因为它不打印任何错误),我尝试在本地运行它:structurejacoco:report
java -jar jacoco/jacococli.jar report /buildFiles/coverage/jacoco.exec --classfiles /buildFiles/plugins/com.gandu.da.util.test/bin/com/gandu/da/util/test/AllTests.class --sourcefiles /buildFiles/plugins/com.gandu.da.util.test/src/com/gandu/da/util/test/AllTests.java --html html_report
Run Code Online (Sandbox Code Playgroud)
但它仍然没有显示 html 文件中的源代码。在JaCoCo 官方常见问题解答中我看到:
为什么覆盖率报告不显示突出显示的源代码?确保满足以下先决条件才能在 JaCoCo 覆盖率报告中突出显示源代码:
- 类文件必须使用调试信息进行编译以包含行号。
- 必须在报告生成时正确提供源文件。即指定的源文件夹必须是定义 Java 包的文件夹的直接父级。
我用标志编译了代码-g以获取所有信息 - 它不起作用。另外我相信我确实按预期提供了 src/bin 文件,所以我不确定为什么它不起作用。如何让它发挥作用?
编辑:我必须提供src目录:
java -jar jacoco/jacococli.jar report /buildFiles/coverage/jacoco.exec --classfiles /buildFiles/plugins/com.gandu.da.util.test/bin/com/gandu/da/util/test/AllTests.class --sourcefiles /buildFiles/plugins/com.gandu.da.util.test/src
# WORKED!
Run Code Online (Sandbox Code Playgroud)
现在我想用我的 build.xml 解决这个问题。代码:
<jacoco:report>
<executiondata>
<file file="${coverage.file}"/>
</executiondata>
<structure name="Coverage Report">
<classfiles>
<fileset dir="${buildDirectory}/plugins/com.gandu.da.util.test/bin">
<include name="**/*.class" />
</fileset>
</classfiles> …Run Code Online (Sandbox Code Playgroud) Android:使用 .gradle 升级到 7.0.x 和 jdk 11 后,不会生成 Jacoco 代码覆盖率testCoverageEnabled true。它与 gradle 4.2.x 和 jdk 8 完美配合。
我尝试testCoverageEnabled true使用 gradle 7.0.x 进行删除,它再次开始工作。即使将其设置为false ( testCoverageEnabled false),它也会起作用。但 jacoco 文档说将其标记为true仅用于生成测试覆盖率报告。
在 gradle 4.2 和 jdk 8 中,它工作得很好,现在在 gradle 7.0 和 jdk 11 中,它在删除布尔值后可以正常工作。
谁能帮助我更多地了解如果删除testCoverageEnabled true或设置为false的话它是如何工作的?
android gradle jacoco android-gradle-plugin android-gradle-7.0