问题标签 [jacoco-maven-plugin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1873 浏览

maven - 詹金构建后声纳未显示代码覆盖率

我们有一个多模块 Maven 项目。我们正在使用jacoco进行代码覆盖率分析。我准备了 pom 文件来运行测试用例并获取代码覆盖率。当我在本地构建项目时,我可以在声纳仪表板上看到代码覆盖率。

将更改推送到 github 并且触发 jenkins 构建后,声纳仪表板上的代码覆盖率不可用。我在 jenkins 构建日志中发现了以下错误:

未收集覆盖信息。也许您忘记在编译的类中包含调试信息?

jenkins 构建成功后如何使代码覆盖可用?

0 投票
2 回答
2305 浏览

sonarqube - 声纳报告 + 多模块 maven + Jacoco 插件

我是声纳的新手。我有多模块 Maven 项目。请在下面找到项目结构

注意:(模块 C 是模块 A/模块 B 中的共享模块 - 意味着模块 C 内部将部分进入模块 A 、模块 B 库)根据项目要求,我们有这些结构。

  1. 模块 A - 适用于外部用户。
  2. 模块 B - 适用于内部用户。
  3. 模块 C - 两个模块的通用黑白。

    我正在尝试为这两个模块创建单个声纳报告,但我无法将所有模块 junit 报告(模块 A 和模块 B 报告)集成到单个报告中。我遵循几个示例来组合多模块 maven 项目但没有任何效果。

类似问题1 类似问题2
github-example(声纳中给出的参考)

0 投票
5 回答
47866 浏览

java - Jacoco Maven 多模块项目覆盖

似乎有几个问题,这些问题已经很老了,并且从 Java 8 对 Jacoco 的支持发生了变化。

我的项目包含以下结构

我已经配置了main pom这样的

主 POM.xml

一个 Pom.xml

B pom.xml

我正在执行这个命令mvn clean package。我可以看到 jacoco.exec 正在生成,但是我看不到任何 HTML 报告正在验证数据。

请帮我解决一下这个。另一点是,我的配置对Multi-Module项目是否正确?

更新

已确定的问题。 <destFile>${project.basedir}/../target/jacoco.exec</destFile> 变成 <destFile>${project.basedir}/target/jacoco.exec</destFile>

现在它正在为各个模块生成报告。 知道如何生成合并报告

0 投票
1 回答
1464 浏览

java - Maven 中 pluginManagement 的范围和报告.plugins.plugin.version 缺少警告

我的 Maven 项目给了我像这样的 reports.plugins.plugin.version 警告:

我知道 Maven 3对插件版本更严格,必须指定插件版本。我在 pluginManagement 中指定了版本:

当我在以下位置使用插件时,这可以正常工作并且没有警告build/plugins

但是,它不起作用reporting/plugins

我的问题是:指定的版本范围是否build/plugingManagement仅限于<build>标签内?我可以在不复制两个地方的插件版本的情况下修复警告吗?


这是生成警告的完整示例:

0 投票
1 回答
2471 浏览

sonarqube - 与 sonarqube-maven-plugin 2.7.1 和 jacoco-maven-plugin 0.7.5 不兼容的版本 1007

JaCoCo SonarQube 不兼容版本 1007中讨论的问题 再次发生与sonarqube-maven-plugin 2.7.1 结合jacoco-maven-plugin 0.7.5.201505241946

执行sonar:sonar结果

根据https://jira.sonarsource.com/browse/SONARJAVA-1091 ,这应该已经修复。

我的 SQ-Server 安装中的 java 插件是 3.3 版。

谁能证实这一点?

0 投票
0 回答
377 浏览

sonarqube - 在使用 jacoco 构建声纳期间出现错误“行必须为空或大于零(得到 0)”

我已将我的声纳 java 插件升级到 3.7。我们使用内置的 jacoco 插件来进行代码覆盖。我们使用 maven 目标 org.jacoco:jacoco-maven-plugin:prepare-agent 和 sonar:sonar 来获取由 jenkins 作业触发的声纳构建。但是发布升级后我收到以下错误:

以下是我的 SonarQube 5.1.2 版安装的插件详细信息:

  • Java 3.7
  • LDAP 1.3
  • 吉特 1
  • SVN 1
  • Cobertura 1.6.3

我们没有使用 cobertura。而是使用上面提到的内置 jacoco。

我们正在使用 sonar-maven-plugin:2.7.1。

0 投票
1 回答
1839 浏览

jacoco - 在运行集成测试之前,如何让 Maven 构建等待 Jetty 服务器以分叉模式启动?

我有一份集成测试的代码覆盖率报告。

我确实有集成测试,这些测试在 Maven 构建中成功运行。

当我单击 HTML 报告右上角的“会话”链接时,我可以在列表中看到我的测试类,但我现在看不到测试执行的主要类,并且所有覆盖率报告百分比都在零。

作为旁注,我的单元测试覆盖率工作正常,百分比显示正常。

我的配置如下:

请注意 JaCoCo 插件是如何在码头一号之前定义的。

控制台日志显示失败的连接尝试日志。集成测试无法连接到 localhost。这是因为 Jetty 服务器在 Maven 运行测试之前没有时间启动。

这也是另一个控制台日志位:

拥有start值而不是run-forked目标可以使测试运行良好。但我需要它作为run-forked代码覆盖率报告。

使用该<waitForChild>false</waitForChild>选项对问题没有任何改变。

在运行集成测试之前,如何让 Maven 构建等待 Jetty 服务器以分叉模式启动?

<maxStartupLines>200</maxStartupLines>更新:我可以使用以下选项让 Maven 构建等待 Jetty 服务器以分叉模式启动。

但是现在,报告中没有看到我的集成测试,尽管它们运行良好。

我的日志说:

更新:如果我运行 Maven 命令mvn jacoco:report-integration,控制台会抱怨缺少数据文件:

实际上,数据文件在 pom.xml 文件中指定为<dataFile>${project.build.directory}/coverage-reports/jacoco-it.exec</dataFile>

为什么它被查找为jacoco-it.exec而不是coverage-reports/jacoco-it.exec

是因为 JaCoCo 报告是在 Jetty 服务器有时间停止并生成数据文件之前生成的吗?但是为什么不同的文件路径呢?以及如何告诉 JaCoCo 报告等待呢?

更新:我在集成测试stopWait的目标中添加了 1 :stop

但这并没有改变这个问题。

更新:使用该选项运行构建-X显示以下内容:

这告诉我在 Jetty 服务器停止之前正在生成报告。如果是这样的话,那就是错误的。Jetty 服务器停止后如何生成报告?

0 投票
1 回答
1593 浏览

java - Jacoco Maven 插件 - 包括测试源

我是 Jacoco maven 插件的新手,并试图为我的测试类添加覆盖率分析(我正在使用带有故障安全插件的 TestNG)。

在检查了文档和一些教程后,我使它在Sources Root (src/main) 中的类上工作,但无法设法将这些类包含在Tests Root (src/test) 中。我的项目仅包含测试类,因此只有这些类才需要覆盖率报告。

在 IntelliJ 中,有一个选项“在测试文件夹中启用覆盖”,它可以满足我的需求。所以我认为应该有一种方法可以在插件配置中启用这些文件夹。

谢谢你的帮助!

0 投票
1 回答
2663 浏览

unit-testing - 使用 Jacoco 从 Sonar 中的条件覆盖范围中排除 groovy slf4j 日志记录

我们正在使用带有 Jacoco maven 插件 0.7.4 的 SonarQube 5.1,并且我们所有的 slf4j 日志记录语句,例如log.debug('Something happened')显示只有 2 个分支中的 1 个被覆盖。我知道这是因为 slf4j 在内部做了一个if debug,这很好,但我们不希望这会影响我们的数字。我们对测试 slf4j 不感兴趣,我们宁愿不为不同的日志记录级别多次运行每个测试。

那么,我们如何告诉 Sonar 和/或 Jacoco 将这些行排除在覆盖范围之外呢?它们都具有可配置的文件排除项,但据我所知,这些仅用于将您自己的类排除在覆盖范围之外(使用目标目录),而不是导入的库。无论如何,我尝试添加groovy.util.logging.*'到排除列表,但它没有做任何事情。

logger.isDebugEnabled() 正在杀死我的代码覆盖率。我打算在运行 cobertura 时将其排除在外,并建议对于 Cobertura,应使用“忽略”属性而不是“排除”。我在设置或文档中看不到 Jacoco 或 Sonar 的类似内容。

编辑:在运行 Jacoco 覆盖之后附加来自 Eclipse 的示例图像(Sonar 在其 GUI 中显示相同的内容)。这是来自我们的一个类的实际代码。 Jacoco 分支覆盖 slf4j 日志记录

编辑 2:我们正在使用 Slf4j 注释。这里的文档: http ://docs.groovy-lang.org/next/html/gapi/groovy/util/logging/Slf4j.html

此本地转换使用 LogBack 日志记录为您的程序添加了日志记录功能。对名为 log 的未绑定变量的每个方法调用都将映射到对记录器的调用。为此,将在类中插入一个日志字段。如果该字段已存在,则使用此转换将导致编译错误。方法名称将用于确定在记录器上调用什么。

log.name(exp)

映射到

这里 name 是信息、调试、警告、错误等的占位符。如果表达式 exp 是常量或仅是变量访问,则不会转换方法调用。但这仍然会导致对注入的记录器的调用。

希望这能澄清发生了什么。我们的日志语句变成了 2 个分支 if,以避免为未启用的日志级别构建昂贵的字符串(据我所知,这是一种常见的做法)。但这意味着为了保证覆盖所有这些分支,我们必须针对每个日志级别重复运行每个测试。

0 投票
1 回答
1158 浏览

java - 指示 Jacoco 和 Coveralls 忽略报告中的一些文件

我在带有 Maven 的 Java 项目中使用 Coveralls 为我的项目创建覆盖率报告,并且我希望避免某些类包含在覆盖率计算中。

现在,我认为我可以在构建阶段排除该类,例如MyClassTest.java如下:

无论如何,覆盖率并没有减少,所以我猜这个类MyClass仍然是从 Jacoco 报告中计算出来的。

在 travis 文件中,我将报告阶段称为:

任何想法?