【问题标题】:Maven exec plugin for clean phase用于清洁阶段的 Maven exec 插件
【发布时间】:2014-04-24 08:47:13
【问题描述】:

我正在使用 exec-maven-plugin 在 POM 生命周期的预清理阶段执行自定义清理脚本。此脚本的目的是清理在编译和测试阶段创建的一堆日志文件和测试工件。该脚本需要知道这些文件的路径,因此在初始化阶段它会被 maven-resources-plugin 过滤。

我发现这是一个糟糕的设计选择:我只能在完成 mvn initialize 之后再做 mvn clean。这通常不是问题,因为您只需要在完成某些操作后进行清理......但是,我已经开始使用 maven-release-plugin,它尝试执行 mvn clean deploy,但由于清理脚本而失败不可用。

我想到了以下可能的解决方案:

  1. 仅使用 maven-clean-plugin

  2. 将脚本附加到不同的阶段

  3. 修改脚本使其不需要过滤

这两个我都不喜欢,因为:

  1. 我想使用脚本进行清理,因为它可以让我保持 POM 文件干净(我需要删除很多文件,我不想指定所有将它们手动添加到 maven-clean-plugin)。

  2. 不可能:测试结果需要在测试后由 Jenkins 提取,所以我无法在构建和测试周期中清理它们。清洁循环中没有其他阶段可以绑定。

  3. 有点可能,但在不久的将来我们(可能)希望直接从 Jenkins 发布,它只能访问 sh(而不是 bash),所以我不能使用相对路径,除非我做丑export PATH=.:$PATH。

考虑到我对 Jenkins 服务器的限制(不受我控制),我该如何解决这个问题?

【问题讨论】:

  • 为什么需要自定义脚本?如果您已在目标文件夹中找到所有结果,那应该不是问题。
  • 并非所有结果最终都在目标文件夹中。我们在这里使用的构建和测试工具倾向于在源代码树中留下任何东西。他们不应该在那里,但我无法真正控制。因此,我的自定义脚本在之后清理混乱。
  • 为什么不使用 maven-clean-plugin 来清理其他位置 (maven.apache.org/plugins/maven-clean-plugin/examples/…)。
  • 正如我在问题中提到的,我需要清理很多工件。在脚本中,我可以使用find 和grep 轻松找到它们;以您链接到的方式指定所有这些将导致 POM 文件中包含/排除的列表很长。我希望我可以避免这种情况。

标签: maven


【解决方案1】:

并非所有结果都在目标文件夹中。

这是您的问题 :-) 最干净的解决方案是解决该问题,然后使用 1)。或者,考虑一个条件脚本。将这样的内容提交给src/main/bin:

#!/bin/sh

if [ -f target/generated-clean-script ]; then
    sh target/generated-clean-script
fi

然后在clean 中无条件地运行它。它在第一次运行时不会执行任何操作,但在 initialize 生成该脚本后会清理任何构建。

作为 2) 的变体,请考虑不将其绑定到阶段。需要时直接运行脚本,而不是通过 Maven。

【讨论】:

  • 我非常清楚我的问题出在哪里 :-) 不幸的是,我无法改变。我需要将脚本绑定到 clean 阶段,因为如果发布插件找到未版本化的工件,它会抱怨,而且我不想 svn:ignore 所有这些。我喜欢你使用中间脚本的想法。
猜你喜欢
  • 2018-07-09
  • 1970-01-01
  • 2015-04-23
  • 2011-10-26
  • 2016-03-08
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多