【问题标题】:Order of maven plug-in executionmaven插件执行顺序
【发布时间】:2016-07-25 05:20:12
【问题描述】:

Here 声明:

从 Maven 3.0.3 开始,对于绑定到同一阶段的两个插件,顺序 执行的顺序与您定义它们的顺序相同

我使用的是 Maven 3.3.9,我可以看到执行顺序并不总是由 POM 中的插件顺序定义。

我有以下插件绑定到 Maven 生命周期阶段:

pre-integration-test:  maven-resources-plugin, 3.0.1            - prepares certain files
integration-test:      maven-failsafe-plugin, 2.19.1            - runs Cucumber-jvm tests
post-integration-test: exec-maven-plugin (id: cleaner), 1.5.0   - stops certain processes
                       maven-cucumber-reporting, 2.4.0          - generates rich HTML report
                       exec-maven-plugin (id: converter), 1.5.0 - converts rich HTML report to a light version

绑定到“post-integration-test”阶段的三个插件在此处按照它们在 POM 中的定义顺序列出。 如果所有测试都没有错误通过(在“集成测试”阶段) - 这些插件按预期执行:按照它们在 POM 中定义的顺序。 但是如果任何测试失败 - 那么我会遇到以下情况:

  • 首先运行第三个插件 - “exec-maven-plugin (id: converter)”。它 找不到要转换的“富 HTML 报告”并失败。
  • 之后第二个插件运行 - “maven-cucumber-reporting”。它成功 生成“富 HTML 报告”。
  • 第一个插件 - “exec-maven-plugin (id: cleaner)” - 永远不会运行

还有一个奇怪的事情:虽然“maven-cucumber-reporting”插件成功生成了丰富的HTML报告,但我在日志文件中看到以下内容:“Failed to execute goal maven-cucumber-reporting:2.4.0:在项目上生成(执行)...:发现错误:构建失败“

如果我在 POM 中注释掉第 2 和第 3 插件 - 然后剩余的插件(“exec-maven-plugin (id: cleaner)”)运行成功。在这种情况下,我在日志文件中看到以下内容:“无法在项目上执行目标 maven-failsafe-plugin:2.19.1:verify (default) ...: There are test failures”。嗯,这个消息是意料之中的。

问题:为什么绑定到同一阶段的插件不会按照它们在 POM 中定义的顺序执行(只有在前一个阶段失败时)? p>

【问题讨论】:

  • 你能分享相关的pom.xml部分吗?
  • 这可能与this SO q/a 有关。关于“这些插件按预期执行”,你确定吗?
  • 这部分大约有 6000 个符号 - 对于这个评论来说太长了。此处不允许使用附件。是的,当所有测试都没有错误地通过时 - 这些插件按预期执行:按照它们在 POM 中定义的顺序。
  • 请将您的pom.xml 的相关部分添加到问题(通过edit),而不是在评论中
  • 我阅读了链接。他们说我们不能在同一个 POM 中定义同一个插件两次。所以我改变了绑定: pre-integration-test: maven-resources-plugin, 3.0.1 - 准备某些文件 integration-test: maven-failsafe-plugin, 2.19.1 - 运行 Cucumber-jvm 测试 post-integration-test: exec -maven-plugin (id: cleaner), 1.5.0 - 停止某些进程 maven-cucumber-reporting, 2.4.0 - 生成丰富的 HTML 报告 verify: exec-maven-plugin (id: converter), 1.5.0 - 转换丰富的HTML 报告到精简版

标签: java maven maven-3 maven-failsafe-plugin


【解决方案1】:

嗯,我自己找到了答案。对同一个插件(exec-maven-plugin)有两个定义只是问题的一部分:它解释了错误的执行顺序,但没有解释为什么 cleaner 永远不会运行。后一个问题有以下解释:如果之前构建失败,maven-cucumber-reporting 插件的代码会阻止执行 Maven 生命周期的所有进一步阶段。幸运的是,可以在参数中禁用此代码 - 有关详细信息,请参阅 this issue at GitHub

【讨论】:

  • 你可以在不同阶段对同一个插件进行两次执行...这取决于你如何调用 Maven?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-03
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
  • 2013-03-15
相关资源
最近更新 更多