You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何使用Eclipse客户端获取GitHub Enterprise仓库的所有里程碑

获取GitHub Enterprise仓库所有里程碑的正确实现

看起来你已经完成了客户端初始化和仓库列表的获取,卡在了MilestoneService的使用上对吧?我来帮你补全代码,核心是要通过Repository对象拿到仓库的所有者和名称,然后用MilestoneService的getMilestones方法来获取对应仓库的里程碑。

完整代码示例

import org.eclipse.egit.github.core.Milestone;
import org.eclipse.egit.github.core.Repository;
import org.eclipse.egit.github.core.client.GitHubClient;
import org.eclipse.egit.github.core.service.MilestoneService;
import org.eclipse.egit.github.core.service.RepositoryService;

import java.io.IOException;
import java.util.List;

public class GHEMilestoneFetcher {
    public static void main(String[] args) {
        String gheHost = "github.yourcompany.com"; // 替换成你的GHE域名
        String oauthToken = "your-oauth-token-here"; // 替换成你的OAuth2令牌

        // 初始化GHE客户端
        GitHubClient client = new GitHubClient(gheHost);
        client.setOAuth2Token(oauthToken);
        // 如果你的GHE使用HTTPS(默认是),确保协议正确
        client.setProtocol("https");

        try {
            RepositoryService repoService = new RepositoryService(client);
            // 获取当前授权用户的所有仓库,也可以指定特定所有者:repoService.getRepositories("ownerName")
            List<Repository> repositories = repoService.getRepositories();

            // 初始化MilestoneService,只需传入配置好的GitHubClient
            MilestoneService milestoneService = new MilestoneService(client);

            for (Repository repo : repositories) {
                System.out.println("=== 仓库: " + repo.getName() + " 的里程碑 ===");
                // 获取该仓库的所有里程碑,第三个参数可选("open"/"closed"/"all"),默认返回open状态
                List<Milestone> milestones = milestoneService.getMilestones(repo.getOwner().getLogin(), repo.getName(), "all");

                if (milestones.isEmpty()) {
                    System.out.println("无里程碑");
                } else {
                    for (Milestone milestone : milestones) {
                        System.out.println("- 标题: " + milestone.getTitle());
                        System.out.println("  状态: " + milestone.getState());
                        System.out.println("  创建时间: " + milestone.getCreatedAt());
                        System.out.println("  截止时间: " + milestone.getDueOn());
                        System.out.println();
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
            System.err.println("获取里程碑时出错: " + e.getMessage());
        }
    }
}

关键细节说明

  • MilestoneService初始化:你之前写到一半的代码,只需要补全为new MilestoneService(client)即可,不需要额外参数。
  • 获取里程碑的必填参数getMilestones方法必须传入两个核心参数:
    1. 仓库所有者的登录名(通过repo.getOwner().getLogin()从Repository对象中获取)
    2. 仓库名称(通过repo.getName()获取)
      第三个参数是里程碑状态,可选值为"open"/"closed"/"all",不传的话默认只返回open状态的里程碑。
  • GHE配置注意:确保GitHubClient的host是你的GHE域名(不要带https://前缀,比如直接写github.yourcompany.com),并且根据你的实例配置设置正确的协议(大多数GHE实例默认用HTTPS)。
  • 依赖提示:如果是Maven项目,需要引入egit的GitHub核心库依赖:
<dependency>
    <groupId>org.eclipse.mylyn.github</groupId>
    <artifactId>org.eclipse.egit.github.core</artifactId>
    <version>2.1.5</version> <!-- 可使用最新兼容版本 -->
</dependency>

内容的提问来源于stack exchange,提问作者Peter Penzov

火山引擎 最新活动