JIRA自定义插件开发 - 创建自定义字段返回null

时间:2014-10-14 13:12:59

标签: java jira

我目前正在开发一个自定义JIRA插件,而且我在将我的插件集成到JIRA项目/问题管理系统时遇到了一些麻烦。我现在只使用JIRA SDK大约4个月了,所以我不是专家。

一些注意事项:

  • 我有一个名为 PluginListener 的类,它实现了InitializingBean。在我的课程中,我覆盖了 afterPropertiesSet 方法,并在那里放置了自定义字段代码。
  • 在同一方法中,我也创建了自定义问题类型,我知道这样做有效,因为我可以在JIRA中创建该问题类型的问题。
  • 我基本上都在遵循本指南:http://www.j-tricks.com/tutorials/plugin-lifecycle-events
  • 我使用的是ATLAS版本:4.2.18

现在,我的代码目前正在发生的是 createCustomField 方法返回null。当我运行atlas-debug命令时,我可以看到(在cmd中)由于该方法而抛出空指针异常。因此没有安装该插件。

这是我的代码:

public class PluginListener implements InitializingBean, DisposableBean {

private final IssueTypeManager issueTypeManager;
private final CustomFieldManager customFieldManager;
private final FieldScreenManager fieldScreenManager;

public PluginListener(IssueTypeManager issueTypeManager, CustomFieldManager customFieldManager, FieldScreenManager fieldScreenManager) {
    this.issueTypeManager = issueTypeManager;
    this.customFieldManager = customFieldManager;
    this.fieldScreenManager = fieldScreenManager;
}

@Override
public void destroy() throws Exception {
    // Handle plugin disabling or un-installation here
}

@Override
public void afterPropertiesSet() throws Exception {
    // Handle plugin enabling or installation here      

    // Create issue type:
    IssueType issueType = this.issueTypeManager.createIssueType("TheType", "TheDescription", "/images/icons/issuetypes/genericissue.png");

    // Create custom field:
    // Create a list of issue types for which the custom field needs to be available    
    List<GenericValue> issueTypes = new ArrayList<GenericValue>();
    issueTypes.add(null);

    // Create a list of project contexts for which the custom field needs to be available
    List<JiraContextNode> contexts = new ArrayList<JiraContextNode>();
    contexts.add(GlobalIssueContext.getInstance());

    CustomFieldType fieldType = this.customFieldManager.getCustomFieldType("com.atlassian.jira.plugin.system.customfieldtypes:textfield");        
    CustomFieldSearcher fieldSearcher = this.customFieldManager.getCustomFieldSearcher("com.atlassian.jira.plugin.system.customfieldtypes:textsearcher");

    // Add custom field
    final CustomField cField = this.customFieldManager.createCustomField("FOO", "BAR", fieldType, fieldSearcher, contexts, issueTypes);

    // Add field to default Screen
    FieldScreen defaultScreen = fieldScreenManager.getFieldScreen(FieldScreen.DEFAULT_SCREEN_ID);
    if (!defaultScreen.containsField(cField.getId())) {
        FieldScreenTab firstTab = defaultScreen.getTab(0);
        firstTab.addFieldScreenLayoutItem(cField.getId());
    }
}

}

1 个答案:

答案 0 :(得分:0)

正在运行atlas-debug从JIRA冷启动中有效地安装插件;可能的问题是在JIRA完全准备好运行和处理某些类型的请求之前安装了JIRA插件(并激活了他们的OSGi包)。

要调试这个,在你的atlas-debug运行失败后,我会尝试手动导航到Toolgear-&gt;附加组件 - &gt;管理加载项并尝试重新上传你的插件.JAR(找到它) target目录)。如果它的工作时间,它表明JIRA在初始系统启动时根本没有为你的插件做好准备,所以你需要在其他地方移动字段创建步骤。

您可以尝试onStart事件。如果这对你不起作用,最可靠的方法可能是延迟初始化,只要你能确保在用户第一次访问你的插件时执行这一步骤。