用于清理阶段的Maven exec插件

用于清理阶段的Maven exec插件,maven,Maven,我使用execmaven插件在POM生命周期的预清理阶段执行自定义清理脚本。此脚本的目的是清理在编译和测试阶段创建的一组日志文件和测试工件。该脚本需要知道这些文件的路径,因此在初始化阶段,maven resources插件将对其进行过滤 我发现这是一个糟糕的设计选择:我只能在完成mvn初始化后进行mvn清理。这通常不是一个问题,因为你只需要在做了一些事情后进行清洁。。。但是,我已经开始使用maven release插件,它尝试执行mvn clean deploy,但由于clean脚本不可用而失败

我使用execmaven插件在POM生命周期的预清理阶段执行自定义清理脚本。此脚本的目的是清理在编译和测试阶段创建的一组日志文件和测试工件。该脚本需要知道这些文件的路径,因此在初始化阶段,maven resources插件将对其进行过滤

我发现这是一个糟糕的设计选择:我只能在完成
mvn初始化后进行
mvn清理
。这通常不是一个问题,因为你只需要在做了一些事情后进行清洁。。。但是,我已经开始使用maven release插件,它尝试执行
mvn clean deploy
,但由于clean脚本不可用而失败

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

  • 只使用maven clean插件

  • 将脚本附加到其他阶段

  • 修改脚本,使其不需要过滤

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

  • 我想使用该脚本进行清理,因为它允许我保持POM文件的干净(有很多文件需要删除,我不想手动将它们全部指定给maven clean插件)

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

  • 有点可能,但在不久的将来,我们(可能)希望直接从Jenkins发布,Jenkins只能访问sh(而不是bash),因此我不能使用相对路径,除非我使用丑陋的
    导出路径=。:$PATH

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


    并非所有结果最终都会显示在目标文件夹中

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

    #!/bin/sh
    
    if [ -f target/generated-clean-script ]; then
        sh target/generated-clean-script
    fi
    
    然后在
    clean
    中无条件运行它。它在第一次运行时不会执行任何操作,但在
    initialize
    生成该脚本后,会清理任何构建


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

    为什么需要自定义脚本?如果您已在目标文件夹中找到所有结果,则不应成为问题。并非所有结果最终都在目标文件夹中。我们在这里使用的构建和测试工具有一种倾向,就是在源代码树上到处都留下东西。他们不应该在那里,但我真的无法控制。因此,我的自定义脚本将在事后清理混乱。为什么不使用maven clean插件来清理其他位置()。正如我在问题中提到的,有很多工件需要清理。在脚本中,我可以通过
    find
    grep
    轻松找到它们;以链接到的方式指定所有这些对象将导致POM文件中包含/排除的长列表。我很清楚我的问题在哪里:-)不幸的是,我无法改变。我需要将脚本绑定到clean阶段,因为如果发布插件发现未版本的工件,它会抱怨,我不想svn:忽略所有这些工件。我喜欢你使用中间脚本的想法。