【发布时间】:2016-09-22 21:06:04
【问题描述】:
对于我们的端到端测试,我们需要执行以下逻辑流程:
- 在数据库中创建和设置 e2e 模式(用户) (
pre-integration-test) - 运行 Liquibase 以初始填充架构 (
pre-integration-test) - 将 e2e 特定的测试数据添加到 DB 表 (
pre-integration-test) - 启动 Tomcat (
pre-integration-test) - 使用 Protractor 在 Tomcat (
integration-test) 中运行 Web 应用程序 - 关闭 Tomcat (
post-integration-test) - 清理数据库:删除架构 (
post-integration-test)
为了运行 SQL,使用了sql-maven-plugin,但是这个流程不适合常规的 POM 布局:
- SQL 插件必须在
pre-integration-test期间运行两次,之前和之后liquibase-maven-plugin - SQL 插件必须在
pre-integration-test期间运行 before Tomcat 插件,但是它必须在post-integration-test期间运行 after,以便在之后删除 DB 架构Tomcat 已关闭。
据我从Maven docs 得出的结论,POM 中插件的顺序定义了同一阶段的执行顺序,一个插件不能在同一个 POM 中被提及两次。
问题:除了编写一个会多次调用 Maven 的 shell 脚本之外,还有什么方法可以实现这一点?
附:找到了一个类似的unanswered question。
【问题讨论】:
-
作为解决方法,我建议从第 3 步向下使用 exec-maven-plugin 作为 maven cli
-
不可能,即使在 pom 中两次声明同一个插件(按照您想要的顺序,由另一个插件交错)将导致其执行合并,因此最终顺序不会受到影响(首先执行第一个声明的插件的同一阶段的目标,然后是交错的)。从 cli 或通过 exec maven 插件列出所有这些目标确实是一种解决方案,但不是可选的(它们将在阶段之外运行)。功能请求可能是一个更好的主意。
-
是的,这也是我观察到的,两次提到一个插件确实会导致一些意想不到的行为。我认为编写外部控制脚本确实是最好的解决方案,尽管它依赖于平台。
标签: java maven tomcat liquibase sql-maven-plugin