首页 > 解决方案 > 无法使用 java org.kohsuke.github API 在现有 Gist 中创建文件

问题描述

几天来,我一直在使用 org.kohsuke.github Java 库。我唯一需要的是做 GIST 的所有事情......让他们删除它们,编辑它们以及 gists 中存在的不同文件。

这是我可以对图书馆做的事情:

使用用户令牌进行身份验证。

GitHub gitHub = GitHub.connectUsingOAuth(token);
boolean authenticated = gitHub.isCredentialValid();

一旦通过身份验证,我就可以...

拉取用户要点列表:

gitHub.getMyself().listGists()

创建包含文件的新 Gists:

gitHub.createGist()
     .file(filename,contents)
     .description(description)
     .public_(isPublic)
     .create();

删除要点:

gitHub.getGist(gistId).delete();

获取给定 gist 中的文件列表:

GHGist gist = gitHub.getGist(gistId);
List<String> fileNameList = new ArrayList<>();
for (String filename : gist.getFiles().keySet()) {
     fileNameList.add(filename);
}

虽然我无法以这种方式获取文件的内容(它返回 NULL),但我必须提取文件的 URL,然后像这样获取文件的内容:

String fileContents = "";
GHGistFile file = gitHub.getGist(gistId).getFile(fileName);
try {
     HttpURLConnection conn = gitHub.getConnector().connect(new URL(file.getRawUrl()));
     conn.setRequestMethod("GET");
     InputStream is = conn.getInputStream();
     fileContents = IOUtils.toString(is, StandardCharsets.UTF_8);
     is.close();
     }
catch (IOException e) {e.printStackTrace();}
return fileContents;

我似乎无法使用 API 做的任何事情都是在 gist 文件级别,我需要删除文件、添加文件或更新文件的内容。例如,此代码不会生成任何错误,但它根本不起作用,这意味着代码运行但文件从未在 gist 中创建:

public static void addFileToGist(String filename, String contents, String gistId) {
     GHGist gist = getGist(gistId);
     try{
          gist.update().addFile(filename,contents);
          CustomAlert.showInfo("File Added");
     }
     catch (IOException e) {e.printStackTrace();}
}

难道我做错了什么?还是有其他方法可以用图书馆做到这一点?我是否需要通过 HTTPConnector 创建新的 gist 文件并更新它们等?如果是这样,我似乎无法弄清楚如何做到这一点,而且我在任何地方都找不到 gist 的示例......事实上,互联网搜索与 gist 相关的文档或该库的代码示例基本上不存在,所以我希望那里的人有这方面的经验,并能指出我正确的方向。

麦克风

标签: javagithub-apigist

解决方案


在图书馆的 GitHub 页面上也发布了一个问题,我很快就收到了答复。

对于将来遇到此库问题的任何人,您必须使用 OKHttp 连接来构建它。

因此,将其添加到您的 POM 文件中:

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.9.2</version>
</dependency>

然后将其添加到您的模块信息文件中:

requires okhttp3;

然后像这样构建 GitHub 对象:

GitHub gitHub = new GitHubBuilder().withOAuthToken(token).withConnector(new OkHttpConnector(new OkHttpClient())).build();

一切都会好起来的。


推荐阅读