本周早些时候,我很难恢复Clover在运行时改变的项目属性(这样它就不会干扰后续的插件):
How to revert Maven project.build variables after Clover plugin finishes?
我通过在Maven启动时保存这些属性并使用我的插件中保存的变量而不是Clover改变的那些来解决了这个问题。
现在我能够在预集成测试阶段托管未经过检测的WAR文件,我的测试能够成功运行并通过(之前,我无法从已检测的WAR运行应用程序文件,因为Clover不在发布类路径上。)
不幸的是,我发现分叉的Clover生命周期继续超出测试阶段。在我的测试通过并且嵌入式Tomcat实例关闭之后,原始生命周期再次运行Tomcat7插件,启动服务器并重新运行测试。
我可以使用它运行我的单元测试两次(这可以捕获只出现有或没有Clover检测的边缘情况错误),但是完全运行我的集成测试两次是完全没必要的。这些测试不会触及生产代码(他们使用Selenium在浏览器中自动对其进行UI测试)。如前所述,已检测的WAR文件无论如何都不起作用,因此在运行集成测试时它甚至不再存在。绝对没有理由要再次运行这些测试。
如何在测试阶段完成后告诉Clover终止分叉生命周期,以便集成测试只运行一次?我目前只能在整个生命周期内启用它,或者根本不启用它。
更新:我发现即使我通过传入-Dmaven.clover.skip = true来禁用Clover插件,它仍会分叉生命周期。我发现阻止这种情况的唯一方法是完全注释掉Clover插件,以便在跳过检测之前没有机会分叉生命周期。
答案 0 :(得分:0)
Clover有三个可用于代码检测的目标:
clover2:instrument 分叉并行构建生命周期,直到安装'阶段 - 这就是为什么你看到你的构建和测试运行两次的原因 - 一次用于标准构建,一次用于使用Clover构建。 clover2:乐器还会产生两组神器 - 正常神器(例如myapp-1.0.jar)和"三叶草"一些(例如myapp-1.0-clover.jar)。
还有一个名为 clover2:instrument-test 的类似目标 - 它也会分配一个版本,但直到“测试”。相。如果您不想运行集成测试或者想要避免在本地Maven缓存中安装工件,这可能很有用。
如果您不喜欢此行为,则可以使用 clover2:setup 目标。它将在Maven的默认构建生命周期中执行源代码检测。这意味着构建和测试只执行一次。使用clover2:setup时必须记住的唯一事情是生成的工件(JAR,WAR)将包含已检测的类,因此最有可能不会调用“mvn install'或者“部署”'与' clover2:setup'一起 - 为了避免推动" cloverized" JAR进入您的存储库: - )
如果您在CI上运行测试,我建议使用' clover2:setup'配置单独的构建计划。如果您有任何疑问,请随时通过support.atlassian.com与我联系。