1

本周早些时候,我在恢复 Clover 运行时更改的项目属性时遇到了很大的困难(这样它就不会干扰后续插件):

Clover 插件完成后如何恢复 Maven project.build 变量?

我通过在 Maven 启动时保存这些属性并在我的插件中使用保存的变量而不是 Clover 更改的变量来解决了这个问题。

现在我能够在预集成测试阶段托管非仪器 WAR 文件,我的测试能够成功运行并通过(以前,我无法从仪器 WAR 文件运行应用程序,因为 Clover 不是在发布类路径上)。

不幸的是,我发现分叉的 Clover 生命周期超出了测试阶段。在我的测试通过并且嵌入式 Tomcat 实例关闭后,原始生命周期再次运行 Tomcat7 插件,启动服务器,然后重新运行测试。

我可以忍受它两次运行我的单元测试(这可以捕获仅在有或没有 Clover 仪器的情况下出现的边缘情况错误),但运行我的集成测试两次是完全没有必要的。这些测试不涉及生产代码(他们使用 Selenium 在浏览器中自动进行 UI 测试)。如前所述,检测的 WAR 文件无论如何都不起作用,因此在运行集成测试时它甚至不再存在。绝对没有理由需要再次运行这些测试。

如何在测试阶段完成后告诉 Clover 终止分叉生命周期,以便集成测试只运行一次?我目前只能在整个生命周期内启用它,或者根本不启用。

更新: 我发现即使我通过传入 -Dmaven.clover.skip=true 禁用 Clover 插件,它仍然会分叉生命周期。我发现防止这种情况的唯一方法是完全注释掉 Clover 插件,这样它就没有机会在跳过检测之前分叉生命周期。

4

1 回答 1

0

Clover 具有三个可用于代码检测的目标:

clover2:instrument将并行构建生命周期分叉到“安装”阶段——这就是为什么你会看到构建和测试运行两次的原因——一次用于标准构建,一次用于使用 Clover 构建。clover2:instrument 还产生两组工件——正常的(例如 myapp-1.0.jar)和“cloverized”的(例如 myapp-1.0-clover.jar)。

还有一个名为clover2:instrument-test的类似目标- 它也分叉构建,但直到“测试”阶段。如果您不想运行集成测试或者您想避免在本地 Maven 缓存中安装工件,它可能会很有用。

如果你不喜欢这种行为,你可以使用clover2:setup目标。它将在 Maven 的默认构建生命周期中执行源代码检测。这意味着构建和测试都只执行一次。使用 clover2:setup 时唯一需要记住的是生成的工件(JAR、WAR)将包含检测类,因此很可能您不应将 'mvn install' 或 'mvn deploy' 与 'clover2: setup' - 为了避免将“cloverized” JAR 推送到您的存储库中:-)

如果您在 CI 上运行测试,我建议使用“clover2:setup”配置单独的构建计划。如果您有任何问题,请随时通过 support.atlassian.com 与我联系。

于 2014-10-07T20:21:17.637 回答