Jira 插件开发

来源:互联网 发布:淘宝9.9包邮网址 编辑:程序博客网 时间:2024/06/04 18:28

JIRA是一个优秀的问题(bugs,任务,改进,新功能)跟踪及管理软件。采用J2EE技术,JIRA安装简单,容易使用,功能全面,配置灵活,界面友好,可用性以及可扩展性方面都十分出色。

接下来开始,以下我本人的环境。

JDK: jdk 5.0

Jira 版本:V 3.13(是以Exe 安装模式的,当然也可以用war ,ear 等模式安装)

Tomcat : Jira 自带

开发工具:Eclipse 3.2

准备工作:

先到 https://maven.atlassian.com/maven1/jira-development-kit/distributions/

https://maven.atlassian.com/maven1/jira-development-kit/distributions/jira-development-kit-3.13.zip

下载 Jira Jar二进制开发包,搭建java 开发环境。

     Jira 提供2种类型的插件开发,第一种 Report(报表),第二种是 Portlet 。今天就讲如何创建这2种插件。首先我们先来了解一下 Jira 插件的一个xml 配置文件 atlassian-plugin.xml

 

     <atlassian-plugin (1) key="唯一主键" (2) name="插件名称">
    <plugin-info>
        <description>插件的简单描述</description>
        <version>版本 1.0</version>
        <application-version min="3.10" max="3.13"/>
        <vendor name="Sky" url="http://hi.baidu.com/hth_sky
"/
>
    </plugin-info>

 

(1)KEY 标识在Jira 应用当中唯一的一个主键,Jira 通过这个主键找到你相应的 Report ,Portlet

          例如有一张报表名称叫: SaleReport,哪么Jira就通过 主键:SaleReport找到对应的.class去执行

(2)Name 整个插件的名称

 

接下来我们先讲讲报表的开发

 

(0) <report (1) key="SaleReport" name="Sale Report" (2) class="com.company.report.SaleReport">
        <description key="report.description">i18n description</description>
        <label (3) key="project.report.label" />
        <resource type="velocity" (4)name="view" location="templates/report/SaleReport.vm" />
<resource type="velocity" name="excel" location="templates/report/SaleReport-Excel.vm" />
        <resource (5) type="i18n" name="i18n" location="com.company.resources.report" />  
        <properties>
     <property>(6)
                <key>startDate</key>
                <name>report.startdate</name>
                <description>report.startdate.description</description>
               (7) <type>date</type>
            </property>
            <property>
                <key>endDate</key>
                <name>report.startdate</name>
                <description>report.enddate.description</description>
                <type>date</type>
            </property>           
            <property>
                <key>targetUser</key>
                <name>report.targetuser</name>
                <description>report.targetuser.description</description>
                (8) <type>user</type>
            </property>
            <property>
                <key>targetGroup</key>
                <name>group.targetgroup</name>
                <description>group.targetgroup.description</description>
                <type>select</type>
                (9) <values class="com.company.GroupValuesGenerator"/>
            </property>
        </properties>
</report>
  

 

(0) 标识为这个插件为 Report

(1) 在atlassian-plugin.xml 文件内必须唯一的主键,这样才能找到相应的(2)*.class

(2) 处理业务逻辑的一个类,下面我们会详细介绍这个类的实现

(3) 在Jira 应用里面看到的报表名称,取值在*.properties文件里面取,在(5)配置properties文件

(4) 数据的显示方式,默认的方式 view 以HTML 方式查看,当然也配置excel 方式导出数据

(5) 配置该报表的资源文件,可以实现国际化

(6) 报表的查询参数

(7) 参数类型 date ,以Jira 默认的时间控件显示

(8) 参数类型 user ,以jira 默认的用户空间显示

(9) 参数类型 select,values ,class 该类返回一个Map 对象,对象存储键值对的数据以select HTML 控件显示

 

接下来我们讲讲com.company.report.SaleReport 的实现方式

 

public class SaleReport extends (1) AbstractReport {

// Generate html report
public String generateReportHtml(ProjectActionSupport action, Map params)
    throws Exception {
   return "view";(2)
}

// Generate excel, report
@Override
public String generateReportExcel(ProjectActionSupport action, Map params)
    throws Exception {
   return "excel";(4)
}

@Override(3)
public boolean isExcelViewSupported() {
   return true;
}

}

 

 

(1) 继承Jira 的抽象类 AbstractReport 并且实现需要实现的方法,例如你只需要实现HTML 的哪么就实现 generateReportHtml 并且返回 "view"

(2) 以 VIEW 方式显示。

(3) 以EXCEL 方式显示,必须重写这个方法,并且 return true;

(4) 以 excel 方式显示。

 

哪么第一节 Report 就讲完了,至于VM 如何实现大家就等去看看 Velocity Template Language VTL http://velocity.apache.org/

 

接下来讲一下 Portlet 的实现方式

 

<portlet (1)key="PersonPortlet" name="Person Portlet"

(2)class="com.company.portlet.PersonPortlet">
        <description key="portlet.description">i18n description</description>       
        <resource type="velocity" name="view" location="templates/portlet/portlet.vm" />       
        <resource type="i18n" name="i18n" location="com.company.resources.portlet" />       
(3)<resource type="download" name="a" location="portlets/dashboard/thumbnails/*.png" />
<resource type="download" name="b" location="portlets/dashboard/thumbnails/*.png" />
<label key="portlet.name" />
                <objectdescriptor key="portlet.display.name" />
   <properties>
    <property>
     <key>numOfWeeks</key>
     <name>portlet.numOfWeeks.label</name>
     <description>portlet.numOfWeeks.description</description>
     <type>long</type>
     <default>1</default>
    </property>   
   </properties>
    </portlet>

在此(1),(2)跟报表完全一致,所以无需再讲,我们来看看第三点

(3) 这个是 配置portlet 的时候,简单显示的一个小图片

我们重点来看看*.class 的实现方式

 

public class PersonPortlet extends (1) PortletImpl{

public PersonPortlet(
    JiraAuthenticationContext authenticationContext,
    PermissionManager permissionManager,
    ApplicationProperties applicationProperties) {
   super(authenticationContext, permissionManager, applicationProperties);(2)
}

 

@Override
(3) protected Map getVelocityParams(PortletConfiguration portletConfiguration) {
  
   return Map;
}
}

 

(1) 必需继承PortletImpl 实现类,之后重现getVelocityParams

(2) 必须实现他的构造函数

(3) 重新getVelocityParams方法

 

这样子Jira 插件开发就算完成了。打包程序成*.jar 放到Jira应用程序lib 下面。重新启动服务器,即可读取到你的插件。