JIRA REST java client API实际应用

Posted 目前在腾讯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JIRA REST java client API实际应用相关的知识,希望对你有一定的参考价值。

[本文出自天外归云的博客园]

前提

1、需要安装maven环境;

2、在本地创建maven项目并修改maven配置文件“pom.xml”,添加如下内容:

<dependency>
    <groupId>com.atlassian.jira</groupId>
    <artifactId>jira-rest-java-client</artifactId>
    <version>0.5-m6</version>
</dependency>
<dependency>
    <groupId>com.atlassian.util.concurrent</groupId>
    <artifactId>atlassian-util-concurrent</artifactId>
    <version>3.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.sharegov/mjson -->
<dependency>
    <groupId>org.sharegov</groupId>
    <artifactId>mjson</artifactId>
    <version>1.4.1</version>
</dependency>

以上三个依赖中,前两个是用来和jira进行交互的类库,最后一个是可以让我能够像在python中处理json一样处理json的mjson类库。

封装方法

对JIRA的操作进行简单封装,示例如下:

package com.mockCommon.util;

import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;

import org.joda.time.DateTime;
import com.atlassian.jira.rest.client.JiraRestClient;
import com.atlassian.jira.rest.client.NullProgressMonitor;
import com.atlassian.jira.rest.client.domain.Comment;
import com.atlassian.jira.rest.client.domain.Issue;
import com.atlassian.jira.rest.client.internal.jersey.JerseyJiraRestClientFactory;

import mjson.Json;

public class JiraUtil {

    /**
     * 登录JIRA并返回指定的JiraRestClient对象
     * 
     * @param username
     * @param password
     * @return
     * @throws URISyntaxException
     */
    public static JiraRestClient login_jira(String username, String password) throws URISyntaxException {
        final JerseyJiraRestClientFactory factory = new JerseyJiraRestClientFactory();
        final URI jiraServerUri = new URI("http://jira.ms.netease.com");
        final JiraRestClient restClient = factory.createWithBasicHttpAuthentication(jiraServerUri, username, password);
        return restClient;
    }

    /**
     * 获取并返回指定的Issue对象
     * 
     * @param issueNum
     * @param username
     * @param password
     * @return
     * @throws URISyntaxException
     */
    public static Issue get_issue(String issueNum, String username, String password) throws URISyntaxException {
        final JiraRestClient restClient = login_jira(username, password);
        final NullProgressMonitor pm = new NullProgressMonitor();
        final Issue issue = restClient.getIssueClient().getIssue(issueNum, pm);
        return issue;
    }

    /**
     * 获取指定JIRA备注部分的内容
     * 
     * @param issue
     * @param username
     * @param password
     * @return
     * @throws URISyntaxException
     */
    public static List<String> get_comments_body(Issue issue, String username, String password)
            throws URISyntaxException {
        List<String> comments = new ArrayList<String>();
        for (Comment comment : issue.getComments()) {
            comments.add(comment.getBody().toString());
        }
        return comments;
    }

    /**
     * 获取指定JIRA的创建时间
     * 
     * @param issueNum
     * @param username
     * @param password
     * @return
     * @throws URISyntaxException
     */
    public static DateTime get_create_time(Issue issue, String username, String password) throws URISyntaxException {
        return issue.getCreationDate();
    }

    /**
     * 获取指定JIRA的描述部分
     * 
     * @param issueNum
     * @param username
     * @param password
     * @return
     * @throws URISyntaxException
     */
    public static String get_description(Issue issue, String username, String password) throws URISyntaxException {
        return issue.getDescription();
    }

    /**
     * 获取指定JIRA的标题
     * 
     * @param issueNum
     * @param username
     * @param password
     * @return
     * @throws URISyntaxException
     */
    public static String get_summary(Issue issue, String username, String password) throws URISyntaxException {
        return issue.getSummary();
    }

    /**
     * 获取指定JIRA的报告人的displayName并返回String类型对象
     * 
     * @param issueNum
     * @param username
     * @param password
     * @return
     * @throws URISyntaxException
     */
    public static String get_reporter(Issue issue, String username, String password) throws URISyntaxException {
        return issue.getReporter().getDisplayName();
    }

    /**
     * 获取指定JIRA的分派人的displayName并返回String类型对象
     * 
     * @param issue
     * @param username
     * @param password
     * @return
     * @throws URISyntaxException
     */
    public static String get_assignee(Issue issue, String username, String password) throws URISyntaxException {
        Json json = Json.read(issue.getFieldByName("分派给").getValue().toString()).asJsonList().get(0);
        return json.at("displayName").toString();
    }

    /**
     * 测试函数
     * 
     * @param args
     * @throws URISyntaxException
     */
    public static void main(String[] args) throws URISyntaxException {
        String username = "用户名";
        String password = "密码";
        String issueNum = "JIRA号";
        final Issue issue = get_issue(issueNum, username, password);
        List<String> jiraCommentsBody = get_comments_body(issue, username, password);
        DateTime jiraCreateTime = get_create_time(issue, username, password);
        String description = get_description(issue, username, password);
        String summary = get_summary(issue, username, password);
        String reporter = get_reporter(issue, username, password);
        String assignee = get_assignee(issue, username, password);
        System.out.println(assignee);
    }

}

以上代码中在get_assignee()方法部分用到了mjson中的Json对象,也是主要用来处理json的对象。首先将返回结果(一个包含在list中的json对象)转换为jsonList并取第一个元素,也就是其中包含的json对象。然后将json对象中的displayName属性值取出来。

代码中“用户名”、“密码”、“JIRA号”部分为需要替换的部分。

以上是关于JIRA REST java client API实际应用的主要内容,如果未能解决你的问题,请参考以下文章

JIRA REST API cors

如何使用 JIRA REST API 将 JIRA Agile 问题分配给当前用户的当前 sprint?

如何使用 JIRA Cloud REST API 创建对 jira 问题的内部评论

自动在 JIRA Adaptavist 工具中发布测试结果,来自 Eclipse 上运行的 rest api 测试用例

SonarQube 无法使用 REST API 连接到 JIRA 7

JIRA REST API 获取工作日志 - “您无权查看指定问题”