Extending JIRA
| 
PDF |
JIRA is very flexible, and has a number of extension points where JIRA's data can be queried or its functionality
extended. You can also download the JIRA Plugin Development Kit. This contains full source code
for seven working plugins (and growing), skeleton project templates for creating your own plugins, full JIRA API documentation
and all library dependencies.
| Custom Field Types |
JIRA comes with various custom field types defined. New types can be
written and plugged into JIRA. See the Writing Custom Field Types
Tutorial for more information.
|
| Portlets |
New portlets can be created by writing a Java class, a template and an XML
descriptor file, packaged as a JIRA plugin. See How To Create a JIRA Portlet for more information.
|
| Reports |
JIRA comes with various reports built-in. Using the plugin system, new reports can be written, providing new ways of viewing and
summarising JIRA's data.
|
| Workflow functions and conditions |
JIRA's issue workflow (states and state transitions an issue can go through) can be customized through the
web interface (see the workflow documentation. The workflow engine (OSWorkflow) provides hooks where you can plug in your own behaviour:
- Run arbitrary Java when a certain transition occurs, via post-functions
- Limit visibility of transitions to certain users, via conditions
- Validate input on transition screens (eg. in comments), via validators
See the guide to creating custom workflow elements for how to
write your own workflow post-functions, conditions and validators. Once written, these can be packaged as
plugins and reused.
|
| Issue and Project Tabs |
When viewing an issue, some issue information (comments, change history) is displayed in tabs:
Likewise, the 'Browse Project' page contains tab panels displaying project information:
By writing a plugin, you can add new issue or project tab panels to JIRA. For instance, you may wish to
display project/issue data pulled in from an external source. This is how JIRA's Subversion and Perforce integration works.
See the plugin guide for more information on writing these plugin types.
|
| Listeners |
JIRA has a complete event subsystem which fires events whenever anything happens. For example an
ISSUE_CREATED event is fired whenever an issue is created.
A listener is just a class which implements a JiraListener interface and is called whenever
events occur in JIRA. Using those events, you can then perform any action you want. For example the email
sent by JIRA is driven by the MailListener.
This is useful when you want to drive or affect external systems from events which occur within JIRA -
usually used to push data into outside systems.
For more information, read the listeners documentation.
|
| Services |
Services are classes which implement the JiraService interface. When installed, you specify an
update period and JIRA will call the run() method of your service periodically.
A sample service is provided called POPCommentService. This service checks a particular POP
mailbox periodically and if it finds messages, tries to extract an issue key from the subject. If the
subject contains a key, the body of the mail is added as a comment to the message.
Services are useful when you want to periodically pull data into JIRA from outside systems.
For more information, see the services guide.
|
| SOAP and XML-RPC remote interfaces |
JIRA has a growing SOAP and XML-RPC interface. This enables you to drive JIRA automatically from external
systems. For example you can have a Java program, Perl script or C# client add issues to JIRA. See the JIRA RPC overview for general information. For building RPC clients, check out the SOAP client tutorial and XML-RPC client tutorial. New RPC endpoints can also be added to JIRA as plugins - see RPC Endpoint Plugins.
|
| Java |
JIRA has a full set of Java APIs that can be used to update information with in JIRA.
You can view the API here. JIRA commercial customers get full access to the JIRA
source (see bottom of the downloads page), so you can modify JIRA itself if
necessary. See the Building JIRA from Source page for more information.
|