Maven 多项目 Cobertura 在 mvn 站点构建期间报告问题

2024-03-21

我们有一个多项目,我们正在尝试运行 Cobertura 测试覆盖率报告,作为我们 mvn 站点构建的一部分。我可以让 Cobertura 在子项目上运行,但它错误地报告 0% 覆盖率,即使报告仍然突出显示单元测试所命中的代码行。

我们使用的是 mvn 2.0.8。我尝试过跑步mvn clean site, mvn clean site:stage and mvn clean package site。我知道测试正在运行,它们显示在 Surefire 报告中(txt/xml 和站点报告)。我在配置中遗漏了什么吗? Cobertura 不适用于多项目吗?

这是在父 .pom 中:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <inherited>true</inherited>
                <executions>
                    <execution>
                        <id>clean</id>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
<reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <inherited>true</inherited>
        </plugin>
    </plugins>
</reporting>

我尝试在子 .poms 中使用或不使用以下内容来运行它:

    <reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
        </plugin>
    </plugins>
</reporting>

我在构建的输出中得到了这个:

...
[INFO] [cobertura:instrument]
[INFO] Cobertura 1.9 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file
Instrumenting 3 files to C:\workspaces\sandbox\CommonJsf\target\generated-classes\cobertura
Cobertura: Saved information on 3 classes.
Instrument time: 186ms

[INFO] Instrumentation was successful.
...
[INFO] Generating "Cobertura Test Coverage" report.
[INFO] Cobertura 1.9 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file
Cobertura: Loaded information on 3 classes.
Report time: 481ms

[INFO] Cobertura Report generation was successful.

And the report looks like this: cobertura report


我怀疑您在编译阶段错过了 cobertura 插件的执行,因此代码仅在测试运行后在站点生命周期中由报告插件进行检测。因此,测试运行不会被执行,因为它们在非检测代码上运行。更仔细地分析您的构建日志 - 如果我是对的,您会注意到肯定的测试是在 cobertura:instrument 之前执行的。

我的配置与您的配置类似,但除了在pluginManagement中指定干净执行(像您一样)之外,我还在构建插件部分中显式指定了cobertura插件:

  <build>
  ...
    <plugins>
    ...
      <plugin>
        <inherited>true</inherited>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>${cobertura.plugin.version}</version>
      </plugin>
    </plugins>
  </build>

我的配置有点有效,所有 Cobertura 内容都在全球组织范围的 pom 中,所有项目都将其用作父项目。

这样,项目就不会在其 pom.xml 中指定任何与 Cobertura 相关的内容,但它们仍然会生成覆盖率报告。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven 多项目 Cobertura 在 mvn 站点构建期间报告问题 的相关文章

随机推荐

  • 如何删除 JavaScript 中的查询字符串参数?

    除了使用正则表达式之外 是否有更好的方法可以从标准 JavaScript 中的 URL 字符串中的查询字符串中删除参数 这是我到目前为止所想出的 似乎在我的测试中有效 但我不喜欢重新发明查询字符串解析 function RemovePara
  • 在android中使用Intent选择PDF文件

    嘿 我是 android 新手 我有一个选择要求pdf文件使用Intent 我正在使用此代码来设置 MIME 类型 Intent intent new Intent Intent ACTION GET CONTENT intent setT
  • Android Studio 无法解析导入项目中的 R?

    我正在尝试新的 Android Studio 我使用 build gradle 选项从 eclipse 导出了一个项目 然后我将其导入到 Android Studio 中 gen下的R java文件上面有一个小红圈的j 在我的源文件中 只要
  • 当选中某个项目时,UpdatePanel 内的复选框列表会触发完整回发

    所以我有这个复选框列表 我想为其内部的元素实现全选功能 我将其放置在 UpdatePanel 中 但每次单击某个项目时 整个页面都会重新加载 这是我的代码
  • 如何使用 VIM 搜索项目的所有文件?

    有几件事我还不明白 VIM 方式 其中之一是在项目中进行搜索 如下所示 在 Atom 中使用 VIM 我目前使用 CtrlP 作为文件名 但是内容呢 如何使用字符串进行搜索 然后使用 VIM 和 或 VIM 插件查看所有出现的事件的列表 我
  • launchctl 无法运行二进制文件并以代码 78 退出

    我一直在构建一个 golangapp https gist github com krlc 8b9a79b33b857d1a66221ffc802d3c0d带有系统托盘 GUI 我想了launchctl每当我登录时运行我的程序 程序编译并运
  • 使用 Docker Compose 的交互式 shell

    有没有办法仅使用 Docker Compose 在容器中启动交互式 shell 我在 docker compose yml 中尝试过类似的操作 myapp image alpine latest entrypoint bin sh 当我使用
  • SublimeLinter:PHP linting 不起作用

    PHP linting 不适用于SublimeLinter https github com SublimeLinter SublimeLinter虽然它说PHP loaded在控制台中 我正在 Windows 上工作 此外 如果我打开命令
  • 哪里可以找到Hibernate的DTD?

    hibernate jar 中的 DTD 是了解可以包含哪些属性以及该标记的预期名称的好方法 打开 DTD 文件是获取所有元素和属性概览 查看默认值以及一些注释的最简单方法 这将帮助程序员从头开始编写 hibernate cfg xml 文
  • VS2022:如何使 ASP.NET Core 5 应用程序显示其控制台窗口

    在 VS2019 中 当我启动 ASP NET Core 5 应用程序时 它只公开一个 API 如果重要的话 会弹出该应用程序的控制台窗口 曾经有一些设置来决定是将其作为控制台 独立应用程序运行还是将其托管在 IIS Express 中 我
  • Glassfish 4不加载js文件

    我最近搬家了 从 glassfish 3 1 jsf 2 0 primefaces 3 5 java 6 到 glassfish 4 jsf 2 2 primefaces 5 java 8 Javascript 文件 通常是 Primefa
  • 是否可以在没有开发者 ID 的情况下测试推送通知?

    在 xcode 7 beta 版本之后 我可以在没有开发者 ID 的情况下在真实设备上安装应用程序 但是 我们可以做同样的事情吗 push notification 还是必须申请开发者ID 如果有方法请参考链接 为了使用 Apple 推送通
  • Sequelize 查找软删除的行

    我试图从数据库中获取一些已软删除的行和一些未软删除的行 但它对我不起作用 Model findAll where cond xxx include Model2 paranoid false then function rows do so
  • 使用 Apache tika 删除 PDFont 缓存

    我试图仅从许多不同的代码 rtf doc pdf 中提取文本 我很自然地转向 Apache Tika 因为它可以自动检测文档并相应地提取文本 我只对文本感兴趣 对格式等不感兴趣 我的应用程序最终出现了严重的内存泄漏 经过调查 这是来自 PD
  • Jquery 可拖放和可排序组合

    我被要求创建一个正方形网格 其中每个正方形可能包含也可能不包含链接 并且这些链接应该能够在网格上移动 我认为可拖动 可放置将是一种可行的方法 并且它工作得很好 但是 现在我们希望能够在一个可拖动对象放在另一个对象之上时能够交换可拖动对象 所
  • t-sql udf,获取参数的数据类型

    是否可以为我的 udf 获取数字参数 并根据其类型执行操作 例如 如果 p1的类型是decimal 10 3 否则如果 p1的类型是decimal 15 3 否则如果 p1 的类型是整数 尝试 sql variant property 函数
  • 字符串的最小字典值

    当使用运算符 smallest string 更具体地说 什么是比任何其他字符串更小的 使用 空字符串是所有字符串中 最小 的 也就是说 它比任何非空字符串都小 21 4 8 4 字符串 op template
  • 在用户定义类型和现有类型之间定义已存在(例如在 Prelude 中)运算符的正确方法是什么?

    假设我有一个包装现有类型的自定义类型 newtype T T Int deriving Show 假设我希望能够加起来Ts 并且将它们相加应该会导致将包装值相加 我会通过以下方式做到这一点 instance Num T where T t1
  • http 服务器可以检测到客户端已取消其请求吗?

    我的网络应用程序必须处理和提供大量数据才能显示某些页面 有时 用户关闭或刷新页面 而服务器仍在忙于处理该页面 这意味着服务器将继续处理数据几分钟 然后将其发送给不再侦听的客户端 是否可以检测到连接已断开并做出反应 在这个特定的项目中 我们使
  • Maven 多项目 Cobertura 在 mvn 站点构建期间报告问题

    我们有一个多项目 我们正在尝试运行 Cobertura 测试覆盖率报告 作为我们 mvn 站点构建的一部分 我可以让 Cobertura 在子项目上运行 但它错误地报告 0 覆盖率 即使报告仍然突出显示单元测试所命中的代码行 我们使用的是