zoukankan      html  css  js  c++  java
  • 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.Iterator;
    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.BasicComponent;
    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 com.mockCommon.model.JiraInfoModel;
    
    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 {
            try {
                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;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取并返回指定的Issue对象
         * 
         * @param issueNum
         * @param username
         * @param password
         * @return
         * @throws URISyntaxException
         */
        public static Issue get_issue(String issueNum, String username, String password) throws URISyntaxException {
            try {
                final JiraRestClient restClient = login_jira(username, password);
                final NullProgressMonitor pm = new NullProgressMonitor();
                final Issue issue = restClient.getIssueClient().getIssue(issueNum, pm);
                return issue;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA备注部分的内容
         * 
         * @param issue
         * @param username
         * @param password
         * @return
         * @throws URISyntaxException
         */
        public static List<String> get_comments_body(Issue issue) throws URISyntaxException {
            try {
                List<String> comments = new ArrayList<String>();
                for (Comment comment : issue.getComments()) {
                    comments.add(comment.getBody().toString());
                }
                return comments;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的创建时间
         * 
         * @param issueNum
         * @param username
         * @param password
         * @return
         * @throws URISyntaxException
         */
        public static DateTime get_create_time(Issue issue) throws URISyntaxException {
            try {
                return issue.getCreationDate();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的描述部分
         * 
         * @param issueNum
         * @param username
         * @param password
         * @return
         * @throws URISyntaxException
         */
        public static String get_description(Issue issue) throws URISyntaxException {
            try {
                return issue.getDescription();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的标题
         * 
         * @param issueNum
         * @param username
         * @param password
         * @return
         * @throws URISyntaxException
         */
        public static String get_summary(Issue issue) throws URISyntaxException {
            try {
                return issue.getSummary();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的报告人的名字
         * 
         * @param issueNum
         * @param username
         * @param password
         * @return
         * @throws URISyntaxException
         */
        public static String get_reporter(Issue issue) throws URISyntaxException {
            try {
                return issue.getReporter().getDisplayName();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的分派人的姓名列表
         * 
         * @param issue
         * @param username
         * @param password
         * @return
         * @throws URISyntaxException
         */
        public static ArrayList<String> get_assignees(Issue issue) throws URISyntaxException {
            try {
                Json json = Json.read(issue.getFieldByName("分派给").getValue().toString());
                Iterator<Json> assignees = json.asJsonList().iterator();
                ArrayList<String> assigneesNames = new ArrayList<String>();
                while (assignees.hasNext()) {
                    Json assignee = Json.read(assignees.next().toString());
                    String assigneeName = assignee.at("displayName").toString();
                    assigneesNames.add(assigneeName);
                }
                return assigneesNames;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的状态
         * 
         * @param issue
         * @param username
         * @param password
         * @return
         * @throws URISyntaxException
         */
        public static String get_status(Issue issue) throws URISyntaxException {
            try {
                return issue.getStatus().getName();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的类型
         * 
         * @param issue
         * @param username
         * @param password
         * @return
         * @throws URISyntaxException
         */
        public static String get_issue_type(Issue issue) throws URISyntaxException {
            try {
                return issue.getIssueType().getName();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的模块
         * 
         * @param issue
         * @param username
         * @param password
         * @return
         * @throws URISyntaxException
         */
        public static ArrayList<String> get_modules(Issue issue) throws URISyntaxException {
            try {
                ArrayList<String> arrayList = new ArrayList<String>();
                Iterator<BasicComponent> basicComponents = issue.getComponents().iterator();
                while (basicComponents.hasNext()) {
                    String moduleName = basicComponents.next().getName();
                    arrayList.add(moduleName);
                }
                return arrayList;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的前端人员的姓名列表
         * 
         * @param issue
         * @param username
         * @param password
         * @return
         * @throws URISyntaxException
         */
        public static ArrayList<String> get_qianduans(Issue issue) throws URISyntaxException {
            try {
                ArrayList<String> qianduanList = new ArrayList<String>();
                Json json = Json.read(issue.getFieldByName("前端").getValue().toString());
                Iterator<Json> qianduans = json.asJsonList().iterator();
                while (qianduans.hasNext()) {
                    Json qianduan = Json.read(qianduans.next().toString());
                    String qianduanName = qianduan.at("displayName").toString();
                    qianduanList.add(qianduanName);
                }
                return qianduanList;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的开发的姓名列表
         * 
         * @param issue
         * @param username
         * @param password
         * @return
         * @throws URISyntaxException
         */
        public static ArrayList<String> get_developers(Issue issue) throws URISyntaxException {
            try {
                ArrayList<String> developersList = new ArrayList<String>();
                Json json = Json.read(issue.getFieldByName("开发").getValue().toString());
                Iterator<Json> developers = json.asJsonList().iterator();
                while (developers.hasNext()) {
                    Json developer = Json.read(developers.next().toString());
                    String developerName = developer.at("displayName").toString();
                    developersList.add(developerName);
                }
                return developersList;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的产品人员的姓名
         * 
         * @param issue
         * @param username
         * @param password
         * @return
         * @throws URISyntaxException
         */
        public static String get_product(Issue issue) throws URISyntaxException {
            try {
                String product_field = issue.getFieldByName("产品人员").getValue().toString();
                return Json.read(product_field).at("displayName").toString();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的UE开始时间
         * 
         * @param issue
         * @return
         * @throws URISyntaxException
         */
        public static String get_UE_start_time(Issue issue) throws URISyntaxException {
            try {
                String UE_start_time = issue.getFieldByName("UE开始时间").getValue().toString();
                return UE_start_time;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的UE结束时间
         * 
         * @param issue
         * @return
         * @throws URISyntaxException
         */
        public static String get_UE_end_time(Issue issue) throws URISyntaxException {
            try {
                String UE_end_time = issue.getFieldByName("UE结束时间").getValue().toString();
                return UE_end_time;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的UI开始时间
         * 
         * @param issue
         * @return
         * @throws URISyntaxException
         */
        public static String get_UI_start_time(Issue issue) throws URISyntaxException {
            try {
                String UI_start_time = issue.getFieldByName("UI开始时间").getValue().toString();
                return UI_start_time;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的UI结束时间
         * 
         * @param issue
         * @return
         * @throws URISyntaxException
         */
        public static String get_UI_end_time(Issue issue) throws URISyntaxException {
            try {
                String UI_end_time = issue.getFieldByName("UI结束时间").getValue().toString();
                return UI_end_time;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的客户端开始时间
         * 
         * @param issue
         * @return
         * @throws URISyntaxException
         */
        public static String get_app_start_time(Issue issue) throws URISyntaxException {
            try {
                String app_start_time = issue.getFieldByName("客户端开始时间").getValue().toString();
                return app_start_time;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的客户端结束时间
         * 
         * @param issue
         * @return
         * @throws URISyntaxException
         */
        public static String get_app_end_time(Issue issue) throws URISyntaxException {
            try {
                String app_end_time = issue.getFieldByName("客户端结束时间").getValue().toString();
                return app_end_time;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的前端开始时间
         * 
         * @param issue
         * @return
         * @throws URISyntaxException
         */
        public static String get_qianduan_start_time(Issue issue) throws URISyntaxException {
            try {
                String qianduan_start_time = issue.getFieldByName("前端开始时间").getValue().toString();
                return qianduan_start_time;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的前端结束时间
         * 
         * @param issue
         * @return
         * @throws URISyntaxException
         */
        public static String get_qianduan_end_time(Issue issue) throws URISyntaxException {
            try {
                String qianduan_end_time = issue.getFieldByName("前端结束时间").getValue().toString();
                return qianduan_end_time;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的开发开始时间
         * 
         * @param issue
         * @return
         * @throws URISyntaxException
         */
        public static String get_develop_start_time(Issue issue) throws URISyntaxException {
            try {
                String develop_start_time = issue.getFieldByName("开发开始时间").getValue().toString();
                return develop_start_time;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的开发结束时间
         * 
         * @param issue
         * @return
         * @throws URISyntaxException
         */
        public static String get_develop_end_time(Issue issue) throws URISyntaxException {
            try {
                String develop_end_time = issue.getFieldByName("开发结束时间").getValue().toString();
                return develop_end_time;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的联调开始时间
         * 
         * @param issue
         * @return
         * @throws URISyntaxException
         */
        public static String get_liantiao_start_time(Issue issue) throws URISyntaxException {
            try {
                String liantiao_start_time = issue.getFieldByName("联调开始时间").getValue().toString();
                return liantiao_start_time;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的联调结束时间
         * 
         * @param issue
         * @return
         * @throws URISyntaxException
         */
        public static String get_liantiao_end_time(Issue issue) throws URISyntaxException {
            try {
                String liantiao_end_time = issue.getFieldByName("联调结束时间").getValue().toString();
                return liantiao_end_time;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的测试开始时间
         * 
         * @param issue
         * @return
         * @throws URISyntaxException
         */
        public static String get_test_start_time(Issue issue) throws URISyntaxException {
            try {
                String test_start_time = issue.getFieldByName("测试开始时间").getValue().toString();
                return test_start_time;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取指定JIRA的测试结束时间
         * 
         * @param issue
         * @return
         * @throws URISyntaxException
         */
        public static String get_test_end_time(Issue issue) throws URISyntaxException {
            try {
                String test_end_time = issue.getFieldByName("测试结束时间").getValue().toString();
                return test_end_time;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取所有可以收集到的JIRA信息并返回JiraInfoModel类型对象
         * @param issue
         * @return
         * @throws URISyntaxException
         */
        public static JiraInfoModel get_jira_info(Issue issue) throws URISyntaxException {
            List<String> jiraCommentsBody = get_comments_body(issue);
            DateTime jiraCreateTime = get_create_time(issue);
            String description = get_description(issue);
            String summary = get_summary(issue);
            String reporter = get_reporter(issue);
            ArrayList<String> assignees = get_assignees(issue);
            String status = get_status(issue);
            String issueType = get_issue_type(issue);
            ArrayList<String> modules = get_modules(issue);
            ArrayList<String> qianduans = get_qianduans(issue);
            ArrayList<String> developers = get_developers(issue);
            String product = get_product(issue);
            String UE_start_time = get_UE_start_time(issue);
            String UE_end_time = get_UE_end_time(issue);
            String UI_start_time = get_UI_start_time(issue);
            String UI_end_time = get_UI_end_time(issue);
            String app_start_time = get_app_start_time(issue);
            String app_end_time = get_app_end_time(issue);
            String qianduan_start_time = get_qianduan_start_time(issue);
            String qianduan_end_time = get_qianduan_end_time(issue);
            String develop_start_time = get_develop_start_time(issue);
            String develop_end_time = get_develop_end_time(issue);
            String liantiao_start_time = get_liantiao_start_time(issue);
            String liantiao_end_time = get_liantiao_end_time(issue);
            String test_start_time = get_test_start_time(issue);
            String test_end_time = get_test_end_time(issue);
            JiraInfoModel jiraInfoModel = new JiraInfoModel();
            jiraInfoModel.setJiraCommentsBody(jiraCommentsBody);
            jiraInfoModel.setJiraCreateTime(jiraCreateTime);
            jiraInfoModel.setDescription(description);
            jiraInfoModel.setSummary(summary);
            jiraInfoModel.setReporter(reporter);
            jiraInfoModel.setAssignees(assignees);
            jiraInfoModel.setStatus(status);
            jiraInfoModel.setIssueType(issueType);
            jiraInfoModel.setModules(modules);
            jiraInfoModel.setQianduans(qianduans);
            jiraInfoModel.setDevelopers(developers);
            jiraInfoModel.setProduct(product);
            jiraInfoModel.setUE_start_time(UE_start_time);
            jiraInfoModel.setUE_end_time(UE_end_time);
            jiraInfoModel.setUI_start_time(UI_start_time);
            jiraInfoModel.setUI_end_time(UI_end_time);
            jiraInfoModel.setApp_start_time(app_start_time);
            jiraInfoModel.setApp_end_time(app_end_time);
            jiraInfoModel.setQianduan_start_time(qianduan_start_time);
            jiraInfoModel.setQianduan_end_time(qianduan_end_time);
            jiraInfoModel.setDevelop_start_time(develop_start_time);
            jiraInfoModel.setDevelop_end_time(develop_end_time);
            jiraInfoModel.setLiantiao_start_time(liantiao_start_time);
            jiraInfoModel.setLiantiao_end_time(liantiao_end_time);
            jiraInfoModel.setTest_start_time(test_start_time);
            jiraInfoModel.setTest_end_time(test_end_time);
            return jiraInfoModel;
        }
    
        /**
         * 测试函数
         * 
         * @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);
            JiraInfoModel jiraInfoModel = get_jira_info(issue);
            System.out.println(jiraInfoModel.getSummary());
        }
    
    }
    View Code

    对应需要创建model类,JiraInfoModel类,包含所有收集到的数据:

    package com.mockCommon.model;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.joda.time.DateTime;
    
    public class JiraInfoModel {
        List<String> jiraCommentsBody;
        DateTime jiraCreateTime;
        String description;
        String summary;
        String reporter;
        ArrayList<String> assignees;
        String status;
        String issueType;
        ArrayList<String> modules;
        ArrayList<String> qianduans;
        ArrayList<String> developers;
        String product;
        String start_develop_time;
        String UE_start_time;
        String UE_end_time;
        String UI_start_time;
        String UI_end_time;
        String app_start_time;
        String app_end_time;
        String qianduan_start_time;
        String qianduan_end_time;
        String develop_start_time;
        String develop_end_time;
        String liantiao_start_time;
        String liantiao_end_time;
        String test_start_time;
        String test_end_time;
    
        public List<String> getJiraCommentsBody() {
            return jiraCommentsBody;
        }
    
        public void setJiraCommentsBody(List<String> jiraCommentsBody) {
            this.jiraCommentsBody = jiraCommentsBody;
        }
    
        public DateTime getJiraCreateTime() {
            return jiraCreateTime;
        }
    
        public void setJiraCreateTime(DateTime jiraCreateTime) {
            this.jiraCreateTime = jiraCreateTime;
        }
    
        public String getDescription() {
            return description;
        }
    
        public void setDescription(String description) {
            this.description = description;
        }
    
        public String getSummary() {
            return summary;
        }
    
        public void setSummary(String summary) {
            this.summary = summary;
        }
    
        public String getReporter() {
            return reporter;
        }
    
        public void setReporter(String reporter) {
            this.reporter = reporter;
        }
    
        public ArrayList<String> getAssignees() {
            return assignees;
        }
    
        public void setAssignees(ArrayList<String> assignees) {
            this.assignees = assignees;
        }
    
        public String getStatus() {
            return status;
        }
    
        public void setStatus(String status) {
            this.status = status;
        }
    
        public String getIssueType() {
            return issueType;
        }
    
        public void setIssueType(String issueType) {
            this.issueType = issueType;
        }
    
        public ArrayList<String> getModules() {
            return modules;
        }
    
        public void setModules(ArrayList<String> modules) {
            this.modules = modules;
        }
    
        public ArrayList<String> getQianduans() {
            return qianduans;
        }
    
        public void setQianduans(ArrayList<String> qianduans) {
            this.qianduans = qianduans;
        }
    
        public ArrayList<String> getDevelopers() {
            return developers;
        }
    
        public void setDevelopers(ArrayList<String> developers) {
            this.developers = developers;
        }
    
        public String getProduct() {
            return product;
        }
    
        public void setProduct(String product) {
            this.product = product;
        }
    
        public String getStart_develop_time() {
            return start_develop_time;
        }
    
        public void setStart_develop_time(String start_develop_time) {
            this.start_develop_time = start_develop_time;
        }
    
        public String getUE_start_time() {
            return UE_start_time;
        }
    
        public void setUE_start_time(String uE_start_time) {
            UE_start_time = uE_start_time;
        }
    
        public String getUE_end_time() {
            return UE_end_time;
        }
    
        public void setUE_end_time(String uE_end_time) {
            UE_end_time = uE_end_time;
        }
    
        public String getUI_start_time() {
            return UI_start_time;
        }
    
        public void setUI_start_time(String uI_start_time) {
            UI_start_time = uI_start_time;
        }
    
        public String getUI_end_time() {
            return UI_end_time;
        }
    
        public void setUI_end_time(String uI_end_time) {
            UI_end_time = uI_end_time;
        }
    
        public String getApp_start_time() {
            return app_start_time;
        }
    
        public void setApp_start_time(String app_start_time) {
            this.app_start_time = app_start_time;
        }
    
        public String getApp_end_time() {
            return app_end_time;
        }
    
        public void setApp_end_time(String app_end_time) {
            this.app_end_time = app_end_time;
        }
    
        public String getQianduan_start_time() {
            return qianduan_start_time;
        }
    
        public void setQianduan_start_time(String qianduan_start_time) {
            this.qianduan_start_time = qianduan_start_time;
        }
    
        public String getQianduan_end_time() {
            return qianduan_end_time;
        }
    
        public void setQianduan_end_time(String qianduan_end_time) {
            this.qianduan_end_time = qianduan_end_time;
        }
    
        public String getDevelop_start_time() {
            return develop_start_time;
        }
    
        public void setDevelop_start_time(String develop_start_time) {
            this.develop_start_time = develop_start_time;
        }
    
        public String getDevelop_end_time() {
            return develop_end_time;
        }
    
        public void setDevelop_end_time(String develop_end_time) {
            this.develop_end_time = develop_end_time;
        }
    
        public String getLiantiao_start_time() {
            return liantiao_start_time;
        }
    
        public void setLiantiao_start_time(String liantiao_start_time) {
            this.liantiao_start_time = liantiao_start_time;
        }
    
        public String getLiantiao_end_time() {
            return liantiao_end_time;
        }
    
        public void setLiantiao_end_time(String liantiao_end_time) {
            this.liantiao_end_time = liantiao_end_time;
        }
    
        public String getTest_start_time() {
            return test_start_time;
        }
    
        public void setTest_start_time(String test_start_time) {
            this.test_start_time = test_start_time;
        }
    
        public String getTest_end_time() {
            return test_end_time;
        }
    
        public void setTest_end_time(String test_end_time) {
            this.test_end_time = test_end_time;
        }
    }
    View Code

    以上代码中在get_assignees()方法部分用到了mjson中的Json对象,也是主要用来处理json格式的对象。

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

    另外,对于通过jql查询的封装如下:

    /**
     * 通过jql语句进行查询并返回一个包含issue的key的数组
     * 
     * @param username 登录JIRA的用户名
     * @param password 登录JIRA的用户密码
     * @param current_user_name 要查询的用户名
     * @param jql
     * @return
     * @throws URISyntaxException
     */
    public static ArrayList<String> search_jql(String username, String password, String current_user_name, String jql)
            throws URISyntaxException {
        final JiraRestClient restClient = login_jira(username, password);
        final NullProgressMonitor pm = new NullProgressMonitor();
        SearchResult searchResult = restClient.getSearchClient().searchJql(jql, pm);
        Iterator<BasicIssue> basicIssues = searchResult.getIssues().iterator();
        ArrayList<String> issueKeys = new ArrayList<>();
        while (basicIssues.hasNext()) {
            String issueKey = basicIssues.next().getKey();
            System.out.println(issueKey);
            issueKeys.add(issueKey);
        }
        return issueKeys;
    }

    上面这些是基本的例子,后续我又针对实际应用做了很多修改。基于这些封装,再用上Spring MVC框架,我做了一个基于JIRA开发的质量保障平台。

    Github地址:https://github.com/OuterCloud/JiraHelper

    例图1:

    例图2:

  • 相关阅读:
    大二软件工程概论自主学习(第十一周)
    课堂练习1
    数据库的学习
    界面作业
    怎样连接连接数据库
    异常处理
    继承与多态
    String课后作业
    请查看String.equals()方法的实现代码,注意学习其实现方法。
    课后作业
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/6591808.html
Copyright © 2011-2022 走看看