【问题标题】:How to avoid double compilation and testing with cobertura:check?如何避免使用 cobertura:check 进行双重编译和测试?
【发布时间】:2010-08-06 06:51:27
【问题描述】:

我使用maven-cobertura-plugin 来计算我项目中的代码覆盖率。据我了解,这个插件启动了一个新的/分叉的构建周期,以便编译和测试代码库。完成后,插件会计算代码覆盖率。据我了解,这是插件可以使用的唯一方法,对我来说很好。

问题是在cobertura 插件之前我的代码库已经编译和测试过了。因此,我正在经历重复的编译和测试。是否可以避免编译和测试之前 cobertura?或者也许还有其他解决方法?

【问题讨论】:

    标签: java maven-2 cobertura


    【解决方案1】:

    是否可以在 cobertura 之前避免编译和测试?或者也许还有其他解决方法?

    关于这个有几个问题(见MCOBERTURA-83MCOBERTURA-76),但是AFAIK,没有完美的解决方法(由于生命周期的构建方式——Maven 3 中的事情可能会得到改进)。

    我知道的唯一一个(与 CI 服务器一起使用)是运行:

    mvn clean install -Dmaven.test.skip=true
    

    然后

    mvn cobertura:check
    

    而不是在构建生命周期中绑定cobertura:check

    请注意,编译两次应该不是问题,因为所有类都应该是最新的。

    【讨论】:

    • 这真的很有帮助,非常感谢.. 但在我的情况下,cobertura 打印了一些不需要的异常日志,有什么方法可以阻止它们?
    • 如果这是在 CI 环境中,请小心。我发现,当测试在 cobertura 执行期间失败时,它们不会导致构建失败。出于这个原因,我的 CI 服务器执行mvn clean install cobertura:cobertura,有效地运行了所有测试两次。不幸的是,看看插件的 JIRA 中的活动,我不太希望这会得到解决。 :(
    【解决方案2】:

    据我所知,cobertura 需要对您的代码进行字节码编织才能正常工作。

    【讨论】:

      【解决方案3】:

      我能够解决这个问题的唯一方法是将字节码作为我构建的一部分(通过将cobertura:instrument 目标绑定到verify 阶段,并从maven-surefire-plugin 绑定default-test 执行到verify 阶段,因此它不会在每个cobertura 目标执行时作为test 阶段的一部分执行。

      【讨论】:

        猜你喜欢
        • 2022-10-01
        • 1970-01-01
        • 2016-10-11
        • 1970-01-01
        • 2012-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-28
        相关资源
        最近更新 更多