监听器是 JIRA 独有的,并且是一种非常强大的扩展方式。
JIRA 有一个完整的事件子系统,每当应用程序内部发生任何事情时都会触发事件。例如,ISSUE_CREATED
每当创建问题时都会触发一个事件。
侦听器是一个实现侦听器接口之一的类。然后每当 JIRA 中发生事件时调用它。使用这些事件,您可以执行您想要的任何操作。例如,JIRA 发送的电子邮件是由MailListener驱动的。
当您想从 JIRA 中发生的事件驱动或影响外部系统时,侦听器最有用。
在本页面:
此页面上的信息不适用于JIRA OnDemand。
侦听器接口
JIRA 具有以下具体的侦听器(扩展了基本的 JiraListener 接口):
com.atlassian.jira.event。吉拉监听器 | 所有其他 JIRA 侦听器接口扩展的基本接口。涵盖核心侦听器属性,如唯一性、描述、参数等。 |
com.atlassian.jira.event.issue。问题事件监听器 | JIRA 中的主要侦听器接口,在发生任何问题时使用。 |
com.atlassian.jira.event.user。用户事件监听器 | 每当 JIRA 中的用户发生任何事情时,都会调用此侦听器。 |
示例监听器
提供的示例可以自由使用和修改以在您自己的环境中使用。所有示例的来源都是可用的,并且应该让您很好地了解编写自己的侦听器是多么简单。这两个示例侦听器都包含在 JIRA 2.1 中,并且都实现了UserEventListener
和IssueEventListener
.
- DebugListener ( source ) — 这是一个非常简单的监听器,它在收到事件时将事件及其内容打印到 System.out。要测试此侦听器,请添加一个带有 class 的侦听器
com.atlassian.jira.event.listeners.DebugListener
。 - MailListener ( source ) — 这个监听器是当前从 JIRA 内部发送邮件通知的方式,也是更复杂监听器的一个很好的例子。它基本上监听事件,并使用 Velocity 模板将它们转换为电子邮件通知以生成邮件正文。
此侦听器通常在 JIRA 中始终处于打开状态——有关更多详细信息,请参阅电子邮件通知。如果您想编写更复杂或更具体的通知,您可以禁用内部 MailListener 并添加您自己的。
可以通过侦听器完成的有用任务的其他示例包括:
- 发送 SMS 或 IM 通知— 侦听器可以通过 SMS 或即时消息(例如 ICQ 或 AIM)轻松发送各种事件的通知 — 或任何有 Java 库来发送消息的地方。
- 组通知——侦听器可以通知某些组的问题更改,具体取决于问题的内容。例如,环境中包含“windows”的任何问题都可以通知您的“windows-developers”组。
注册监听器
对于自定义编写的侦听器类,请确保您的侦听器类位于 JIRA 可以看到的类路径中 - 最佳位置通常是JIRA 安装目录<jira-application-dir>/WEB-INF/classes
中的子目录或<jira-application-dir>/WEB-INF/lib
子目录(作为 JAR 文件)。
注册一个监听器:
- 以具有“JIRA 系统管理员” 全局权限的用户身份登录。
- 选择“管理”>“系统”>“高级”>“侦听器”(选项卡)以打开“侦听器”页面。
键盘快捷键:'g' + 'g' +输入'lis' - 在页面底部的“添加侦听器”表单中,填写以下字段:
- 'Name' - 一个适当描述监听器的名字。
- 'Class' — 监听器的完全限定的类名。
要使用 JIRA 的内置侦听器类之一,首先单击“内置侦听器”链接以展开侦听器类列表,然后单击列表中特定类的名称。内置侦听器的完全限定类名将添加到“类”字段。
- 单击“添加”按钮,监听器现在将添加到上面的监听器列表中。
编辑侦听器属性
如果您的侦听器接受参数或属性,您可以通过单击与您的侦听器关联的“编辑”链接(在 JIRA 管理区域的“侦听器”页面上)来编辑它们。
在定义自己的 Listener 时,有一个方法getAcceptedParams
可以重载定义参数名称,作为 String 对象数组传递。该DebugParamListener
课程就是这样做的一个例子。
删除监听器
要删除侦听器,请单击与该侦听器关联的“删除”链接(在 JIRA 管理区域的“侦听器”页面上)。
自定义事件
通过向 JIRA添加自定义事件的能力,必须更新侦听器以适当地处理事件。这可以通过customEvent(IssueEvent event)
在侦听器中提供方法的实现来实现。例如,MailListener 实现将自定义事件传递给通知处理。DebugListener 记录自定义事件已被触发。
也可以看看
- 插件教程 - 使用 atlassian-event 库编写事件侦听器- 这描述了如何使用 Atlassian 事件库(请参阅JIRA-specific Atlassian Events)而不是上面描述的 JIRA 侦听器事件来编写侦听器。