使用uwolfer gerrit-rest-java-client获取Gerrit信息

使用Gerrit来做代码管理工具的话,难免要调用Gerrit的API。

Gerrit rest api

我们来看个例子,体会下gerrit rest api的交互过程:

请求如下, changes是API,q字符串想必gerrit的用户是熟悉的,n是限定个数:

GET /changes/?q=status:open+is:watched&n=2 HTTP/1.0

响应信息例:

  HTTP/1.1 200 OKContent-Disposition: attachmentContent-Type: application/json; charset=UTF-8)]}'[{"id": "demo~master~Idaf5e098d70898b7119f6f4af5a6c13343d64b57","project": "demo","branch": "master","change_id": "Idaf5e098d70898b7119f6f4af5a6c13343d64b57","subject": "One change","status": "NEW","created": "2012-07-17 07:18:30.854000000","updated": "2012-07-17 07:19:27.766000000","mergeable": true,"insertions": 26,"deletions": 10,"_number": 1756,"owner": {"name": "John Doe"},},{"id": "demo~master~I09c8041b5867d5b33170316e2abc34b79bbb8501","project": "demo","branch": "master","change_id": "I09c8041b5867d5b33170316e2abc34b79bbb8501","subject": "Another change","status": "NEW","created": "2012-07-17 07:18:30.884000000","updated": "2012-07-17 07:18:30.885000000","mergeable": true,"insertions": 12,"deletions": 18,"_number": 1757,"owner": {"name": "John Doe"},"_more_changes": true}]

gerrit的网站上有Rest API的指南和文档。指南:https://gerrit-review.googlesource.com/Documentation/dev-rest-api.html,文档:https://gerrit-review.googlesource.com/Documentation/rest-api.html

uwolfer gerrit rest java client

我们要编程调用gerrit api时发现,光是pojo对象就得写好多。这样例行公事的工作当然是交给开源库来实现最划算了。
比如我们可以使用 uwolfer gerrit rest java client.

引入依赖

大家的后端工程应该是使用maven管理的,我们就先引入maven依赖:

<dependencies><dependency><groupId>com.urswolfer.gerrit.client.rest</groupId><artifactId>gerrit-rest-java-client</artifactId><version>0.8.16</version></dependency>
</dependencies>

鉴权

下一步我们就可以调用gerrit-rest-java-client封装的API来调用gerrit rest api了。
首先要鉴权,记得gerrit的设置中有一项是HTTP password么,这里就该它发挥作用了。

        GerritRestApiFactory gerritRestApiFactory = new GerritRestApiFactory();GerritAuthData.Basic authData = new GerritAuthData.Basic("http://gerrit网址", "用户名", "HTTP password");GerritApi gerritApi = gerritRestApiFactory.create(authData);

访问gerrit数据

鉴权成功之后,我们就可以通过gerritApi为所欲为了。

例1,查询10个status为merged的change:

            List<ChangeInfo> changes = gerritApi.changes().query("status:merged").withLimit(10).get();for (ChangeInfo ci : changes) {System.out.println("Change ID:"+ci.changeId);System.out.println("Project:"+ci.project);System.out.println("Branch:"+ci.branch);System.out.println("Subject:"+ci.subject);System.out.println("=======================");}

运行例:

Change ID:I5c490fba0f109824ae5c5cd91e7222787da9f41d
Project:xxx
Branch:yyy
Subject:zzz

例2,遍历当前gerrit下都有些什么工程

            List<ProjectInfo> projects = gerritApi.projects().list().get();for (ProjectInfo pi: projects){System.out.println(pi.name);System.out.println(pi.description);System.out.println("~~~~~~~~~~~~~~");}

输出例:

code/device/asus/fugu
null
~~~~~~~~~~~~~~
code/device/asus/fugu-kernel
null
~~~~~~~~~~~~~~
code/device/common
null
~~~~~~~~~~~~~~
code/device/coolpad/common
null
~~~~~~~~~~~~~~

完整代码

下面是上面两例的完整代码:
pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.alios.basic.test</groupId><artifactId>TestGerrit3</artifactId><version>1.0.0-SNAPSHOT</version>
<dependencies><dependency><groupId>com.urswolfer.gerrit.client.rest</groupId><artifactId>gerrit-rest-java-client</artifactId><version>0.8.16</version></dependency>
</dependencies></project>

Java代码:

package cn.alios.basic.tools;import com.google.gerrit.extensions.api.GerritApi;
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.common.ProjectInfo;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.urswolfer.gerrit.client.rest.GerritAuthData;
import com.urswolfer.gerrit.client.rest.GerritRestApiFactory;import java.util.List;public class TestGerrit {public static void main(String[] args) {GerritRestApiFactory gerritRestApiFactory = new GerritRestApiFactory();GerritAuthData.Basic authData = new GerritAuthData.Basic("http://gerrit.com", "user", "HttpPassword");GerritApi gerritApi = gerritRestApiFactory.create(authData);try {List<ChangeInfo> changes = gerritApi.changes().query("status:merged").withLimit(10).get();for (ChangeInfo ci : changes) {System.out.println("Change ID:"+ci.changeId);System.out.println("Project:"+ci.project);System.out.println("Branch:"+ci.branch);System.out.println("Subject:"+ci.subject);System.out.println("=======================");}List<ProjectInfo> projects = gerritApi.projects().list().get();for (ProjectInfo pi: projects){System.out.println(pi.name);System.out.println(pi.description);System.out.println("~~~~~~~~~~~~~~");}} catch (RestApiException e) {e.printStackTrace();}}
}

使用uwolfer gerrit-rest-java-client获取Gerrit信息相关推荐

  1. java 获取远程服务器信息,java 远程获取服务器信息

    java 远程获取服务器信息 内容精选 换一换 已成功登录Java性能分析.待安装Guardian的服务器已开启sshd.待安装Guardian的服务器已安装JRE,JRE版本要求为Huawei JD ...

  2. java 获取apk版本号_纯JAVA环境获取APK信息:包名,版本,版本号,大小,权限...

    [实例简介] 纯JAVA环境获取APK信息:包名,版本,版本号,大小,权限... 代码讲解地址:http://blog.csdn.net/chillax_li/article/details/4185 ...

  3. java微信获取用户信息接口_java微信接口之二—获取用户组

    一.微信获取用户组接口简介 1.请求 该请求也是GET方式请求.请求的url格式如下: https://api.weixin.qq.com/cgi-bin/groups/get?access_toke ...

  4. java反射获取泛型_如何通过Java反射获取泛型类型信息

    前言 关于Java泛型,很多人都有一个误解,认为Java代码在编译时会擦除泛型的类型,从而在运行时导致没法访问其类型,这其实并不完全正确,因为有一部分泛型信息是可以在运行时动态获取的,这部分信息基本能 ...

  5. JAVA中获取字段信息的方法

    一.JDBC之DatabaseMetaData之获取表信息以及列信息  (1) DatabaseMetaData实例的获取 Connection conn = DriverManager.getCon ...

  6. Java 反射 ---- 获取方法信息

    这一章我们通过Java的反射获取某个类的全部信息,话不多说直接上代码. 先贴工具类获取类信息的方法: package com.wangjd;import java.lang.reflect.Metho ...

  7. java微信获取用户信息_SpringBoot中获取微信用户信息的方法

    前言 不知道你是否参加过拼多多上邀请微信好友砍价功能,这个功能实现首先需要考虑的就是获取微信用户的信息.获取用户信息就是获取公众号下微信用户的信息,今天我就来讲讲如何从公众号下获取微信用户信息. 需要 ...

  8. java ipmi 获取服务器硬件信息(温度,风扇转速,内存数,硬盘数等等)

    本文通过vxipmi.jar获取 官方地址:http://www.veraxsystems.com/en/products/free-ipmi-library-java import java.net ...

  9. java mbean获取堆信息_实时取得虚拟机类信息、内存信息、MXBean的使用方法

    import java.lang.management.ClassLoadingMXBean; import java.lang.management.ManagementFactory; impor ...

  10. java代码获取gc信息,如何监视Java垃圾回收

    在文章<理解Java垃圾收集>中,我们了解了不同GC算法的流程,GC的工作方式,年轻代和年老代,以及您应该了解的新JDK 7中5种类型的GC的知识.这些类型的GC对性能都有影响. 本文将讨 ...

最新文章

  1. Vsftpd 服务器 问题大全
  2. iphone导出照片到电脑_如何把 iPhone 中的照片快速传到电脑上?
  3. nyoj 133 子序列(尺取法+离散化)
  4. [SAP成都] SAP UI5应用的sap-ui-core.js被加载之前,还有哪些js文件被加载了
  5. 三菱plc编程实例3000_三菱入门PLC编程PLC系统程序包括哪些
  6. 【学习笔记】整体二分
  7. 什么是JAX-RS注释? (第2部分)
  8. 交换机开发(四)—— ARP 基础知识解析
  9. Amazon Seller Central is Temporarily Unavailable
  10. django 1.8 官方文档翻译: 3-1-2 编写视图
  11. 数据结构笔记(十七)--矩阵的压缩存储
  12. 今天下午又是在教室里坐了一个下午,头有点晕
  13. 云计算服务器搭建教程,如何搭建云计算平台_搭建云计算平台步骤
  14. 新点软件怎么导入清单_新点造价软件的QDZ招投标清单使用说明
  15. 《新型智慧城市总体规划导则》发布
  16. 深入理解 Base64 底层原理
  17. 金融工程学(一):概述
  18. java实现gif动画效果(java显示动态图片)
  19. Azkaban配置Work Flow案例实操
  20. 安装pyltp模块详细教程(windows下python安装)

热门文章

  1. idea注释模板:类注释模板、方法注释模板(带参数获取以及参数换行)
  2. 日常用语--生病看医生
  3. 视频水平翻转怎么操作 多个视频教你一键搞定批量剪辑
  4. Python中嵌套循环练习
  5. QFile修改替换文件中特定的内容
  6. 芙拉机器人_【诉说实情】芙拉迷你简约纯色锁扣单肩斜挎包女士怎么样?真实使用心得,不看后悔 | 智能扫地机器人评测...
  7. 解决webstorm的中文乱码两中方法
  8. php实现丑数,曾经绊倒我的 “超级丑数”
  9. Ant Design Pro 中 ProTable受控菜单 class类 与 构造函数
  10. 为什么中国长期在科学领域少有重大建树 -关于钱学森之问 的回答