【问题标题】:Automatic execute plugin after svn commitsvn commit 后自动执行插件
【发布时间】:2014-09-05 11:30:06
【问题描述】:

是否可以在从 svn 提交之后或之前执行 maven 插件(由我创建(为了好玩))?

也许这样的事情有合适的 maven 生命周期?

感谢您的帮助!

编辑 pre-commit hook可以执行maven插件吗?

【问题讨论】:

  • 首先,您为什么要这样做?除此之外,这是不可能的,因为这些东西不存在生命周期。
  • 我只想自动化一些流程。这对我不好。也许有一些方法可以解决这个问题..
  • pre-commit hook 将在 SVN 服务器本身上执行,而不是在开发机器上。
  • 在服务器上?提交前和提交后挂钩。在客户端?不存在标准解决方案,但您可以编写自己的 shell 脚本来包装 svn 客户端并执行您想要的操作。
  • 一个预提交钩子作为防止你/其他人提交的能力,它会在构建时阻止 svn 客户端。此外,我不能 100% 确定预提交确切地知道文件结构的样子,因为并发提交不会互相看到......直到提交后挂钩触发,您才能访问稳定文件系统对修订号。可能吗?几乎可以肯定。

标签: maven svn maven-3 maven-plugin mojo


【解决方案1】:

记住一个关于 Subversion 钩子的简单事实:

Subversion 挂钩在 Subversion 服务器上而不是在您的本地系统上运行,并且无法访问用户的本地工作目录,也无法以任何方式操作该工作目录。

所以,你有一个 pre-commit 钩子在 pre-commit 上运行一些 maven 插件,因为它无法访问你所做的更改。

现在,这个 Maven 插件在做什么?它正在运行单元测试吗?重新格式化您的代码?输出一些pithy quotation?为什么这必须在提交之前运行?

您可以使用持续集成工具(我强烈建议您使用)在每次提交后运行您的 Maven 插件,然后在有任何问题时向负责项目的小组发送电子邮件。是的,这将在提交之后发生,但这是版本控制:提交可以撤消。

【讨论】:

    【解决方案2】:

    如前所述,持续集成工具是任何大型工作或团队项目的必经之路。

    但是,您可能会认为持续集成工具有点矫枉过正的原因(尤其是因为它为不断增长的要学习的东西添加了另一个工具,而您现在觉得自己没有时间这样做)

    所以当然可以从您的 svn 服务器触发构建。请记住,这些将针对服务器运行的任何架构进行编译。如果你只是编译java,那么你会没事的。

    您需要使用 post-commit 挂钩,因为 pre-commit 挂钩存在许多问题:

    • 提交到 SVN 的用户每次提交时都必须等待钩子完成。
    • 失败的构建可能会导致提交失败(这是您想要的吗?)。
    • 来自提交的内容在提交之前是不稳定的(在预提交挂钩上,您还没有稳定的版本号。其他人在刚开始提交之后可能会设法首先提交,特别是如果您的构建需要需要一段时间才能完成)。
    • 确定文件的确切状态并不容易,因为它们将在提交之后(参见前面)。

    因此,如果您使用 post-commit 挂钩,事情会容易得多。

    查看svnlook。此命令可用于查询来自提交的更改:post-commit 挂钩中的svnlook changed ${1} -r ${2} > myTest.log 将为您打印一个文件更改列表。您可以轻松地搜索它以查看在上次提交中是否已触及目录,然后使用 svn checkoutmvn deploy 构建该项目。

    【讨论】:

      猜你喜欢
      • 2010-12-24
      • 2013-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多