我曾多次尝试在 Gradle 中配置此 sonarqube 属性sonar.junit.reportPaths,但仍然收到相同的错误消息。
Gradle 版本 -> 6.7.1
SonarQube Server 版本 -> 8.9 (docker image)
Java 版本 -> openjdk 11.0.2
Intellij 版本 -> 2021.1.2
我的 Sonarqube Gradle 配置如下:
plugins {
id 'java'
id 'jacoco'
id "org.sonarqube" version "3.3"
id 'org.jetbrains.kotlin.jvm' version '1.5.20'
}
Run Code Online (Sandbox Code Playgroud)
sonarqube {
properties {
property 'sonar.projectName', 'Snippets of Java code'
property 'sonar.junit.reportPaths', 'build/test-results/test'
property 'sonar.coverage.jacoco.xmlReportPaths', 'build/reports/test/jacocoTestReport.xml'
property 'sonar.inclusions', '*.java,*.kt'
}
}
jacocoTestReport {
reports {
xml.required = true
csv.required = false
}
}
Run Code Online (Sandbox Code Playgroud)
我仍然收到以下消息: …
为了在这里解决我的问题:Applying JaCoCo to all Android Studio gradle module,我在这里应用了解决方案。到目前为止,这对于具有以下功能的模块来说效果很好
plugins {
id("com.android.library")
}
Run Code Online (Sandbox Code Playgroud)
一旦我将所需的内容添加apply from: '../jacoco/modules.gradle'到标记为 Java 库的模块中
plugins {
id("java-library")
}
Run Code Online (Sandbox Code Playgroud)
我得到一个
Caused by: groovy.lang.MissingPropertyException: Could not get unknown property 'android' for project ':lib1' of type org.gradle.api.Project.
Run Code Online (Sandbox Code Playgroud)
我想将其添加apply from到 java 库中,以便也为它们生成 JaCoCo 报告。我在这里想念什么?
我正在将我的项目迁移到 Gradle 7.4,我想使用新的插件 jacoco-report-aggregation 来生成完美合并的单元和集成测试覆盖率报告以发送到 sonarqube。
我在每个子项目上使用 jvm 测试套件。
在此之前,我曾经在每个子项目中手动合并 exec 文件,效果很好
因此,我创建了两个任务: testCodeCoverageReport 和integrationTestCodeCoverageReport 针对 TestSuiteType.UNIT_TEST 和 TestSuiteType.INEGRATION_TEST testType,并将报告发送给 sonarqube。
我的配置:
plugins {
id "org.sonarqube" version "3.3"
id "org.owasp.dependencycheck" version "6.4.1.1"
id 'org.springframework.boot' version "$springBootVersion"
// Aggregating code coverage with JaCoCo
id 'jacoco-report-aggregation'
}
dependencies {
jacocoAggregation project(':subproject1')
jacocoAggregation project(':subproject2')
}
reporting {
reports {
testCodeCoverageReport(JacocoCoverageReport) {
testType = TestSuiteType.UNIT_TEST
}
integrationTestCodeCoverageReport(JacocoCoverageReport) {
testType = TestSuiteType.INTEGRATION_TEST
}
}
}
project.tasks["sonarqube"].dependsOn tasks.named('testCodeCoverageReport', JacocoReport)
project.tasks["sonarqube"].dependsOn tasks.named('integrationTestCodeCoverageReport', JacocoReport)
sonarqube.properties {
property "sonar.coverage.jacoco.xmlReportPaths", …Run Code Online (Sandbox Code Playgroud) 在 Jenkins 中运行测试项目时出现以下错误
Caused by: java.lang.LinkageError: loader 'bootstrap' attempted duplicate class definition for java.lang.$JaCoCo. (java.lang.$JaCoCo is in module java.base of loader 'bootstrap')
Jacoco 在父 pom 和当前测试 pom 中定义,具有不同的目标。
父pom.xml
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.5</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>validate-headless</id>
<phase>validate</phase>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<skip>true</skip>
<propertyName>failsafe.argLine</propertyName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
测试项目-pom.xml
<properties>
<maven.repo.local>${user.home}/.m2/repository</maven.repo.local>
<itCoverageAgent>-javaagent:${maven.repo.local}/org/jacoco/org.jacoco.agent/0.8.5/org.jacoco.agent-0.8.5-runtime.jar=destfile=${basedir}/target/jacoco-it.exec</itCoverageAgent>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<argLine>${failsafe.argLine} ${itCoverageAgent}</argLine>
<testFailureIgnore>true</testFailureIgnore>
<reuseForks>true</reuseForks>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>coverage</id>
<build> …Run Code Online (Sandbox Code Playgroud) 我正在尝试发布由 Jacoco 插件生成的覆盖率报告 - jacoco.exec。但是我得到了下面提到的声纳和 Jacoco 配置的异常。
SonarCube 版本6.7.7
[ERROR] Coverage report 'jacoco.exec' could not be read/imported. Error: {}
java.lang.IllegalStateException: Failed to parse JaCoCo XML report: jacoco.exec
at org.sonar.plugins.jacoco.XmlReportParser.parse(XmlReportParser.java:96)
at org.sonar.plugins.jacoco.JacocoSensor.importReport(JacocoSensor.java:73)
at org.sonar.plugins.jacoco.JacocoSensor.importReports(JacocoSensor.java:64)
at org.sonar.plugins.jacoco.JacocoSensor.execute(JacocoSensor.java:48)
at org.sonar.scanner.sensor.SensorWrapper.analyse(SensorWrapper.java:53)
at org.sonar.scanner.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:88)
at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:82)
at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:68)
at org.sonar.scanner.phases.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:88)
at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:177)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121)
at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:291)
at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:286)
at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:264)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121)
at org.sonar.scanner.task.ScanTask.execute(ScanTask.java:48)
at org.sonar.scanner.task.TaskContainer.doAfterStart(TaskContainer.java:84)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121)
at org.sonar.scanner.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:121)
at org.sonar.batch.bootstrapper.Batch.doExecuteTask(Batch.java:116)
at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:71)
at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native …Run Code Online (Sandbox Code Playgroud) 这是我在运行 mvn jacoco:check for a maven application 时遇到的错误。因此,不会生成报告。
[ERROR] Failed to execute goal org.jacoco:jacoco-maven-plugin:0.8.3:check (default-cli) on project
Netflix: The parameters 'rules' for goal org.jacoco:jacoco-maven-plugin:0.8.3:check are missing or invalid -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.jacoco:jacoco-maven-plugin:0.8.3:check (default-cli) on project Netflix: The parameters 'rules' for goal org.jacoco:jacoco-maven-plugin:0.8.3:check are missing or invalid
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
Run Code Online (Sandbox Code Playgroud)
这是我在 pom.xml 中的 jacoco 插件。我觉得规则没问题。我想知道缺少什么...
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.2</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<phase>test</phase>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<!-- Sets the …Run Code Online (Sandbox Code Playgroud) 摇篮版本:6.1.1
Android Gradle 插件:4.0.0
当尝试运行我的 jacoco 覆盖范围时,它似乎没有考虑版本。当我查看 HTML 报告时,它显示“使用 JaCoCo 0.7.9.201702052155 创建”,尽管我已经进行了toolVersion = "0.8.5"设置。该报告也没有修复我期望在 0.8.3 中与 Kotlin 相关的问题,作为二次确认,这不起作用。
apply plugin: 'jacoco'
jacoco {
toolVersion = "0.8.5"
reportsDir = file("$buildDir/reports")
}
tasks.withType(Test) {
jacoco.includeNoLocationClasses = true
jacoco.excludes = ['jdk.internal.*']
}
project.afterEvaluate {
(android.hasProperty('applicationVariants')
? android.'applicationVariants'
: android.'libraryVariants').all { variant ->
def variantName = variant.name
def unitTestTask = "test${variantName.capitalize()}UnitTest"
def uiTestCoverageTask = "create${variantName.capitalize()}CoverageReport"
tasks.create(name: "${unitTestTask}Coverage", type: JacocoReport, dependsOn: [
"$unitTestTask",
"$uiTestCoverageTask"
]) {
group = "Reporting"
description = "Generate Jacoco …Run Code Online (Sandbox Code Playgroud) Jacoco代码覆盖率运行良好,直到我将Android Gradle 插件升级到4.2.0,不仅生成了应用程序模块代码覆盖率,对于模块它也不起作用。任何想法如何解决这个问题。
android jacoco android-gradle-plugin gradle-kotlin-dsl jacoco-plugin
在我的 gradle 版本中,我有 2 个这样的测试任务:
task testAAA(type: Test) {
filter {
includeTestsMatching "*AAA*"
}
finalizedBy jacocoTestReport
}
Run Code Online (Sandbox Code Playgroud)
和
task testBBB(type: Test) {
filter {
includeTestsMatching "*BBB*"
}
finalizedBy jacocoTestReport
}
Run Code Online (Sandbox Code Playgroud)
这会在 build/jacoco 中生成 2 个 .exec 文件:
测试AAA.exec
testBBB.exec
我想生成一个单一的覆盖率报告,它从两个/所有 .exec 文件中获取输入,我试过这个:
jacocoTestReport {
executionData fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")
reports {
xml.enabled true
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试时,我收到此错误:
Execution failed for task ':Project1:jacocoTestReport'.
> Unable to read execution data file Project1/build/jacoco/test.exec
Project1/build/jacoco/test.exec (No such file or directory)
Run Code Online (Sandbox Code Playgroud)
当我明确提供 executionData 规范时,为什么 jacocoTestReport 寻找“test.exec”?