jira插件开发注意事项

这里整理一下在jira插件开发中的注意事项,或者遇到的问题及处理。


pom.xml部分。

在pom.xml中设置QuickReload属性后(true),运行atlas-run package不用重启即可更新内容。

项目所需要的依赖包,要在pom.xml中添加才能生效,通过添加lib方式的话会编译不通过。

若在pom.xml的设置key属性时(${atlassian.plugin.key}),要求不能再插件配置文件中使用。换而言之,若编译时报错plugin key的问题,可以删除该节点解决。

插件运行后显示无效,可以尝试移除pom.xml中节点及其内容。具体因为什么原因不太记得了。当然也有可能是其他原因引起的。


atlassian-plugin.xml部分

1. 添加自定义字段类型

要在配置文件中添加。举例如下:

   

   

    

    

若需要增加searcher类,还需定义

searcher key="" class="自定义类型的类路径(不用加.java后缀)">

   

    search" location="对应的.vm文件" />

    

    

searcher >


2. 若要添加网页设置,需添加

插件管理页section地址为: admin_plugins_menu

项目管理页section地址为: atl.jira.proj.config


3. 若需要添加工作流动作

触发条件:

验证条件:

结果处理:


4.  若要引入组件

系统组件:

自定义组件:


5.引入数据组件


如:
        The module configuring the Active Objects service used by this plugin
        com.lantu.jira.ao.FieldMap

    

FieldMap为继承自Entity的类。



注解的使用

@Scanned    用于注释类使其可以被扫描到(一般用于在配置文件中的类)

@EventListener    用于注释参数为Jira Event的方法。例如IssueEvent、IssueWatcherAddedEvent

@ComponentImport    用于在类中声明变量的组件,或者构造函数中的参数组件。(可以使大部分组价不用在配置问价中引入)

在实际开发中,遇到过同时使用和@ComponentImport引入ActiveObject时,报错有两个bean的情况。

@Inject    用于注释类中的构造函数

@ExportAsService    用于类


通过ActiveObject管理数据库

需要添加一个继承于Entity的接口,使用@Preload和@Scanned注释。并在其中增加与属性字段相应的set和get方法。

com.atlassian.sal.api.upgrade.PluginUpgradeTask可以实现预先在数据表中插入数据。

数据的创建:

      FieldMap fieldMap = (FieldMap) this.ao.create(FieldMap.class, new DBParam[0]);

        ...   设置字段值

        fieldMap.save();

数据的获取:

      List allList = ImmutableList.copyOf(ao.find(FieldMap.class));    获得全部数据

        或者,List fieldMapList = ImmutableList.copyOf(ao.find(FieldMap.class, "条件字段 = ?", new Object[] { "条件值" }));    获取满足条件的数据。例子中是单个条件,也可以设置多个条件。

在数据表中还没有数据时,在 系统-插件数据存储 中可能看不到相关的数据表,当已经有数据时就有了。


其他

前两天在开发中遇到过一个问题:

    org.springframework.osgi.service.importer.ServiceProxyDestroyedException: service proxy has been destroyed.

    经过排查发现本质是现成问题。

    具体情况为:在一个需要监听问题事件的类中,EventPublisher的注册和注销写法有问题。我在类中实现了InitializingBean和DisposableBean两个类,但是在DisposableBean类的destroy()实现方法中注销Eventpublisher实例时写成了eventPublisher.unregister(this);其实应该写eventPublisher.unregister(类名.this);

还有一个问题是,因为刚开始写的插件里有bug,在本地jira中安装后出现了错误,后来改完插件后再安装上去依然是在log中报错,但是执行中并没有出现问题,在2990的jira中也没出现错误。后来绞尽脑汁实验了各种方法,发现重启一下jira就好了。可能是缓存数据的问题。


你可能感兴趣的:(jira)