如何使用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方法必须传入两个核心参数:- 仓库所有者的登录名(通过
repo.getOwner().getLogin()从Repository对象中获取) - 仓库名称(通过
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




