zoukankan      html  css  js  c++  java
  • jira java接口生成问题

    参考页面:

    可方便扩展的JIRA Rest Web API的封装调用

    JIRA是一个缺陷跟踪管理系统,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域,当我们需要把第三方业务系统集成进来时,可以调用他的API。

    JIRA本身的API非常强大,但它是一个底层的API体系,并不是一个易用的接口,如果要开发和拓展,所以需要我们二次包装。

    jira官方为解决这个问题,推出了方便强大的java client library(目前只有java客户端库,没有.Net类库)

    jira的Rest API  最新文档官网.

    JIRA 6.4.12 REST API documentation

    https://docs.atlassian.com/jira/REST/latest/

    JIRA REST API Tutorials:

    https://developer.atlassian.com/jiradev/jira-apis/jira-rest-apis/jira-rest-api-tutorials

    JIRA Java Client library 

    https://ecosystem.atlassian.net/wiki/display/JRJC/Home

    (获取所有项目目的,获取projectKey,issuetype)

    package jiraTEST;

    import java.net.URI;
    import java.net.URISyntaxException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.concurrent.ExecutionException;

    import org.apache.commons.codec.binary.Base32;
    import org.joda.time.DateTime;

    import com.atlassian.jira.rest.client.IssueRestClient;
    import com.atlassian.jira.rest.client.JiraRestClient;
    import com.atlassian.jira.rest.client.SearchRestClient;
    import com.atlassian.jira.rest.client.domain.BasicIssue;
    import com.atlassian.jira.rest.client.domain.BasicProject;
    import com.atlassian.jira.rest.client.domain.BasicUser;
    import com.atlassian.jira.rest.client.domain.Comment;
    import com.atlassian.jira.rest.client.domain.Field;
    import com.atlassian.jira.rest.client.domain.Issue;
    import com.atlassian.jira.rest.client.domain.Project;
    import com.atlassian.jira.rest.client.domain.SearchResult;
    import com.atlassian.jira.rest.client.domain.Transition;
    import com.atlassian.jira.rest.client.domain.input.ComplexIssueInputFieldValue;
    import com.atlassian.jira.rest.client.domain.input.FieldInput;
    import com.atlassian.jira.rest.client.domain.input.IssueInput;
    import com.atlassian.jira.rest.client.domain.input.IssueInputBuilder;
    import com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory;
    import com.atlassian.util.concurrent.Promise;
    import com.google.common.collect.Lists;

    public class CvteJiraDemo {

    public static String BaseURL = "http://jira-test:8080/";
    public static String User = "admin";
    public static String Password = "admin";
    private static URI jiraServerUri = URI
    .create("http://jira-test/rest/api/2/");
    private static boolean quiet = false;
    private static final long BUG_TYPE_ID = 1L; // JIRA magic value
    private static final long TASK_TYPE_ID = 3L; // JIRA magic value
    private static final DateTime DUE_DATE = new DateTime();
    private static final String PRIORITY = "Trivial";
    private static final String DESCRIPTION = "description";

    public static void main(String[] args) throws InterruptedException,
    ExecutionException {

    final AsynchronousJiraRestClientFactory factory = new AsynchronousJiraRestClientFactory();
    URI jiraServerUri;
    try {
    jiraServerUri = new URI(BaseURL);
    final JiraRestClient restClient = (JiraRestClient) factory
    .createWithBasicHttpAuthentication(jiraServerUri, User,
    Password);
    getAllProjects(restClient);
    getProject(restClient, "DEMO");
    getIssue(restClient, "FEEDBACK-14");
    getIssueFields(restClient, "FEEDBACK-27");
    addIssue(restClient, "FEEDBACK", "AAAAB");
    addIssueComplex(restClient, "FEEDBACK",DUE_DATE.toString());

    } catch (URISyntaxException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } finally {

    }
    }

    private static void println(Object o) {
    if (!quiet) {
    System.out.println(o);
    }
    }

    private static void parseArgs(String[] argsArray) throws URISyntaxException {
    final List<String> args = Lists.newArrayList(argsArray);
    if (args.contains("-q")) {
    quiet = true;
    args.remove(args.indexOf("-q"));
    }

    if (!args.isEmpty()) {
    jiraServerUri = new URI(args.get(0));
    }
    }

    private static Transition getTransitionByName(
    Iterable<Transition> transitions, String transitionName) {
    for (Transition transition : transitions) {
    if (transition.getName().equals(transitionName)) {
    return transition;
    }
    }
    return null;
    }

    // 得到所有项目信息
    private static void getAllProjects(final JiraRestClient restClient)
    throws InterruptedException, ExecutionException {
    try {

    Promise<Iterable<BasicProject>> list = restClient
    .getProjectClient().getAllProjects();
    Iterable<BasicProject> a = list.get();
    Iterator<BasicProject> it = a.iterator();
    while (it.hasNext()) {
    System.out.println(it.next());
    }

    } finally {
    }
    }

    // 得到单一项目信息
    private static void getProject(final JiraRestClient restClient,
    String porjectKEY) throws InterruptedException, ExecutionException {
    try {

    Project project = restClient.getProjectClient()
    .getProject(porjectKEY).get();
    System.out.println(project);

    } finally {
    }
    }

    // 得到单一问题信息
    private static void getIssue(final JiraRestClient restClient,
    String issueKEY) throws InterruptedException, ExecutionException {
    try {

    Promise<Issue> list = restClient.getIssueClient()
    .getIssue(issueKEY);
    Issue issue = list.get();
    System.out.println(issue);

    } finally {
    }
    }

    // 创建问题
    public static BasicIssue createIssue(final JiraRestClient jiraRestClient,
    IssueInput newIssue) {
    BasicIssue basicIssue = jiraRestClient.getIssueClient()
    .createIssue(newIssue).claim();
    return basicIssue;
    }

    //添加备注到问题
    public static void addCommentToIssue(final JiraRestClient jiraRestClient,Issue issue, String comment) {
    IssueRestClient issueClient = jiraRestClient.getIssueClient();
    issueClient.addComment(issue.getCommentsUri(), Comment.valueOf(comment)).claim();
    }


    //删除问题,目前找不到对应API
    public static void deleteIssue(final JiraRestClient jiraRestClient, Issue issue) {
    IssueRestClient issueClient = jiraRestClient.getIssueClient();
    //issueClient.deleteIssue(issue.getKey(), false).claim();
    }

    //通过标题获取问题
    public static Iterable findIssuesByLabel(final JiraRestClient jiraRestClient, String label) {
    SearchRestClient searchClient = jiraRestClient.getSearchClient();
    String jql = "labels%3D"+label;
    com.atlassian.jira.rest.client.domain.SearchResult results = ((SearchRestClient) jiraRestClient).searchJql(jql).claim();
    return results.getIssues();
    }

    //通过KEY获取问题
    public static Issue findIssueByIssueKey(final JiraRestClient jiraRestClient, String issueKey) {
    SearchRestClient searchClient = jiraRestClient.getSearchClient();
    String jql = "issuekey = "" + issueKey + """;
    SearchResult results = searchClient.searchJql(jql).claim();
    return (Issue) results.getIssues().iterator().next();
    }

    // 创建问题 :仅有简单问题名称
    private static void addIssue(final JiraRestClient restClient,
    String porjectKEY, String issueName) throws InterruptedException,
    ExecutionException {
    try {
    IssueInputBuilder builder = new IssueInputBuilder(porjectKEY,
    TASK_TYPE_ID, issueName);
    builder.setDescription("issue description");
    final IssueInput input = builder.build();

    try {
    // create issue
    final IssueRestClient client = restClient.getIssueClient();
    final BasicIssue issue = client.createIssue(input).claim();
    final Issue actual = client.getIssue(issue.getKey()).claim();
    System.out.println(actual);
    } finally {
    if (restClient != null) {
    // restClient.close();
    }
    }

    } finally {
    }
    }

    // 创建问题 :包含自定义字段
    private static void addIssueComplex(final JiraRestClient restClient,
    String porjectKEY, String issueName) throws InterruptedException,
    ExecutionException {
    try {
    IssueInputBuilder builder = new IssueInputBuilder(porjectKEY,
    TASK_TYPE_ID, issueName);
    builder.setDescription("issue description");
    // builder.setFieldValue("priority", ComplexIssueInputFieldValue.with("name", PRIORITY));
    //单行文本
    builder.setFieldValue("customfield_10042", "单行文本测试");

    //单选字段
    builder.setFieldValue("customfield_10043", ComplexIssueInputFieldValue.with("value", "一般"));

    //数值自定义字段
    builder.setFieldValue("customfield_10044", 100.08);

    //用户选择自定义字段
    builder.setFieldValue("customfield_10045", ComplexIssueInputFieldValue.with("name", "admin"));
    //用户选择自定义字段(多选)
    Map<String, Object> user1 = new HashMap<String, Object>();
    user1.put("name", "admin");
    Map<String, Object> user2 = new HashMap<String, Object>();
    user2.put("name", "wangxn");
    ArrayList peoples = new ArrayList();
    peoples.add(user1);
    peoples.add(user2);
    builder.setFieldValue("customfield_10047", peoples);

    //设定父问题
    Map<String, Object> parent = new HashMap<String, Object>();
    parent.put("key", "FEEDBACK-25");
    FieldInput parentField = new FieldInput("parent", new ComplexIssueInputFieldValue(parent));
    builder.setFieldInput(parentField);

    final IssueInput input = builder.build();
    try {
    final IssueRestClient client = restClient.getIssueClient();
    final BasicIssue issue = client.createIssue(input).claim();
    final Issue actual = client.getIssue(issue.getKey()).claim();
    System.out.println(actual);
    } finally {
    if (restClient != null) {
    // restClient.close();
    }
    }

    } finally {
    }
    }


    //获取问题的所有字段
    private static void getIssueFields(final JiraRestClient restClient,
    String issueKEY) throws InterruptedException, ExecutionException {
    try {

    Promise<Issue> list = restClient.getIssueClient()
    .getIssue(issueKEY);
    Issue issue = list.get();
    Iterable<Field> fields = issue.getFields();
    Iterator<Field> it = fields.iterator();
    while (it.hasNext()) {
    System.out.println(it.next());
    }

    } finally {
    }
    }

    }

  • 相关阅读:
    WPF 关于拖拽打开文件的注意事项
    asp.net core 3.1中对Mongodb BsonDocument的序列化和反序列化支持
    用百度webuploader分片上传大文件
    多线程学习笔记
    web.config数据库连接字符串加密
    Visual Studio 2010 常用快捷方式
    Team Foundation Server 2013 日常使用使用手册(四)分支与合并
    Team Foundation Server 2013 日常使用使用手册(三)上传新工程、创建任务、创建bug、设置预警
    Team Foundation Server 2013 日常使用使用手册(二)修改、签入、撤销、回滚、对比代码变更
    Team Foundation Server 2013 日常使用使用手册(一)-本地连接TFS、查看任务
  • 原文地址:https://www.cnblogs.com/antime/p/9437880.html
Copyright © 2011-2022 走看看