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());
} }
对应需要创建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;
}
}
以上代码中在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:

JIRA REST java client API实际应用的更多相关文章
- JIRA Rest JAVA Client API实现问题管理及自定义字段(原创)
JIRA是一个缺陷跟踪管理系统,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域,当我们需要把第三方业务系统集成进来时,可以调用他的API. JIRA本身的A ...
- Memcached Java Client API详解
针对Memcached官方网站提供的java_memcached-release_2.0.1版本进行阅读分析,Memcached Java客户端lib库主要提供的调用类是SockIOPool和MemC ...
- ES系列十五、ES常用Java Client API
一.简介 1.先看ES的架构图 二.ES支持的客户端连接方式 1.REST API http请求,例如,浏览器请求get方法:利用Postman等工具发起REST请求:java 发起httpClien ...
- Java 9 揭秘(14. HTTP/2 Client API)
Tips 做一个终身学习的人. 在此章中,主要介绍以下内容: 什么是HTTP/2 Client API 如何创建HTTP客户端 如何使HTTP请求 如何接收HTTP响应 如何创建WebSocket的e ...
- Elasticsearch Java Rest Client API 整理总结 (一)——Document API
目录 引言 概述 High REST Client 起步 兼容性 Java Doc 地址 Maven 配置 依赖 初始化 文档 API Index API GET API Exists API Del ...
- Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI
目录 引言 Search APIs Search API Search Request 可选参数 使用 SearchSourceBuilder 构建查询条件 指定排序 高亮请求 聚合请求 建议请求 R ...
- Elasticsearch Java Rest Client API 整理总结 (三)——Building Queries
目录 上篇回顾 Building Queries 匹配所有的查询 全文查询 Full Text Queries 什么是全文查询? Match 全文查询 API 列表 基于词项的查询 Term Term ...
- JAVA HDFS API Client 连接HA
如果Hadoop开启HA,那么用Java Client连接Hive的时候,需要指定一些额外的参数 package cn.itacst.hadoop.hdfs; import java.io.FileI ...
- Kafka 0.9+Zookeeper3.4.6集群搭建、配置,新Client API的使用要点,高可用性测试,以及各种坑 (转载)
Kafka 0.9版本对java client的api做出了较大调整,本文主要总结了Kafka 0.9在集群搭建.高可用性.新API方面的相关过程和细节,以及本人在安装调试过程中踩出的各种坑. 关于K ...
随机推荐
- 【C++】atoi与stoi
stoi函数默认要求输入的参数字符串是符合int范围的[-2147483648, 2147483647],否则会runtime error.atoi函数则不做范围检查,若超过int范围,则显示-214 ...
- Fedora 20 安装搜狗拼音输入法
1.卸载ibus sudo yum remove ibus gsettings set org.gnome.settings-daemon.plugins.keyboard active fal ...
- 微信支付中的jsapi返回提示信息
jsapi中跳转到微信支付中触发的方法是js中的getBrandWCPayRequest方法. 改方法中的返回结果msg提示信息如下: err_msg:get_brand_wcpay_request: ...
- hadoop资料
1."Hadoop.Operations.pdf.zip" http://vdisk.weibo.com/s/vDOQs6xMAQH6 2."Hadoop权威指南(中文版 ...
- CentOS7下解决ifconfig command not found
原文地址:https://blog.csdn.net/ryu2003/article/details/78492127 注:本办法仅限于可联网的机器,即在安装时设置了IP地址和DNS可正常上网. 解决 ...
- EasyUI DataGrid Checkbox 多选 获取选中行中的内容
<table id='grid' class='easyui-datagrid' style='width:950px;height:405px' url='Ajax-index.php?mod ...
- java udp 广播
原文链接: http://blog.csdn.net/yudajun/article/details/8477149 udp 是一种网络通信协议,不需要客户端和服务器端建立连接即可进行通讯功能.相对于 ...
- 手动脱WinUpack 壳实战
作者:Fly2015 吾爱破解培训第一课选修作业第6个练习演示样例程序.不得不反复那句话,没见过这样的壳,该壳是压缩壳的一种,相对于压缩壳,加密壳的难度要大一些.特别是IAT表的修复问题上. 首先分别 ...
- STM32的JTAG下载模式
SWJ:串行线JTAG配置 (Serial wire JTAG configuration) SWJ(串行线JTAG)支持JTAG或SWD访问Cortex的调试端口. 系统复位后的默认状态是启用SW ...
- PHP百分号转小数,php 小数转换百分数函数
PHP百分号转小数: <?php $a = "20.544545%"; echo (float)$a/100; ?> php 小数转换百分数函数: function x ...