2014-04-24 162 views
0

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

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

我认为以下可能的解决方案:

  1. 只使用Maven的清理插件

  2. 安装脚本在不同的阶段

  3. 修改脚本,以便它不需要过滤

我不像这类原因,这是因为:

  1. 我想用脚本清理,因为它可以让我保持POM文件干净(也有很多,我需要删除的文件,和我不不想将所有这些手动指定给maven-clean-plugin)。

  2. 不可能:测试结果需要Jenkins检测后才能检测到,所以我无法在构建和测试周期中清除它们。我可以绑定的清洁周期中没有其他阶段。

  3. 可能的分类,但在不久的将来,我们(可能)希望直接从詹金斯发布,而詹金斯只能访问sh(而不是bash),所以我不能使用相对路径,除非我做难看export PATH=.:$PATH

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

+0

为什么你需要一个自定义脚本?如果您将所有结果都放置在目标文件夹中,则不应该成为问题。 – khmarbaise

+0

并非所有结果都在目标文件夹中。我们在这里使用的构建和测试工具倾向于在源代码树上留下东西。他们不应该在那里,但我不能真正控制。因此,我的自定义脚本后来清理混乱。 – Ludo

+0

为什么不使用maven-clean-plugin来清理其他位置(http://maven.apache.org/plugins/maven-clean-plugin/examples/delete_additional_files.html)。 – khmarbaise

回答

0

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

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

#!/bin/sh 

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

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

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

+0

我非常了解我的问题在哪里:-)不幸的是,我无法改变。我需要将脚本绑定到清理阶段,因为释放插件会在发现未版本化的工件时发出抱怨,并且我不想svn:忽略所有这些脚本。我喜欢你使用中间脚本的想法。 – Ludo