这里整理一下在jira插件开发中的注意事项,或者遇到的问题及处理。
在pom.xml中设置QuickReload属性后(
项目所需要的依赖包,要在pom.xml中添加才能生效,通过添加lib方式的话会编译不通过。
若在pom.xml的
插件运行后显示无效,可以尝试移除pom.xml中
1. 添加自定义字段类型
要在配置文件中添加
若需要增加searcher类,还需定义
searcher key="" class="自定义类型的类路径(不用加.java后缀)">
search " location="对应的.vm文件" />
searcher >
2. 若要添加网页设置,需添加
插件管理页section地址为: admin_plugins_menu
项目管理页section地址为: atl.jira.proj.config
3. 若需要添加工作流动作
触发条件:
验证条件:
结果处理:
4. 若要引入组件
系统组件:
自定义组件:
5.引入数据组件
如:
FieldMap为继承自Entity的类。
@Scanned 用于注释类使其可以被扫描到(一般用于在配置文件中的类)
@EventListener 用于注释参数为Jira Event的方法。例如IssueEvent、IssueWatcherAddedEvent
@ComponentImport 用于在类中声明变量的组件,或者构造函数中的参数组件。(可以使大部分组价不用在配置问价中引入)
在实际开发中,遇到过同时使用
@Inject 用于注释类中的构造函数
@ExportAsService 用于类
需要添加一个继承于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
或者,List
在数据表中还没有数据时,在 系统-插件数据存储 中可能看不到相关的数据表,当已经有数据时就有了。
前两天在开发中遇到过一个问题:
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就好了。可能是缓存数据的问题。