| # GitHub Java API (org.eclipse.egit.github.core) | |
| This project is a Java library for communicating with the | |
| [GitHub API](http://developer.github.com/). The goal of the library is to | |
| support 100% of the GitHub v3 API. The library is currently used by the GitHub | |
| Mylyn connector for working with GitHub issues, pull requests, gists, and | |
| repositories from within Eclipse. | |
| Built versions of the GitHub Java library are currently available from the | |
| [Sonatype OSS repository](https://oss.sonatype.org/index.html#nexus-search;quick~org.eclipse.egit.github.core). | |
| Javadoc and source JARs are available as well from the Sonatype OSS repository. | |
| ## Packages | |
| The library is composed of 3 main packages. | |
| ### Core (org.eclipse.egit.github.core) | |
| This package contains all the model classes representing the resources available | |
| through the API such as repositories, commits, user, teams, and issues. The | |
| model classes contains getters and setters for all the properties present in | |
| the GitHub API JSON response. The [Google Gson](http://code.google.com/p/google-gson/) | |
| library is used serialize and deserialize these objects to/from JSON. | |
| ### Client (org.eclipse.egit.github.core.client) | |
| This package contains classes communicate with the GitHub API over HTTPS. | |
| The client package is also responsible for converting JSON responses to | |
| appropriate Java model classes as well as generating request exceptions based on | |
| HTTP status codes. | |
| ### Service (org.eclipse.egit.github.core.service) | |
| This package contains the classes that invoke API calls and return model classes | |
| representing resources that were created, read, updated, or deleted. Service | |
| classes are defined for the resources they interact with such as `IssueService`, | |
| `PullRequestService`, and `RepositoryService`. | |
| ## Examples | |
| ### Authenticating | |
| ```java | |
| //Basic authentication | |
| GitHubClient client = new GitHubClient(); | |
| client.setCredentials("user", "passw0rd"); | |
| ``` | |
| ```java | |
| //OAuth2 token authentication | |
| GitHubClient client = new GitHubClient(); | |
| client.setOAuth2Token("SlAV32hkKG"); | |
| ``` | |
| ### Get a user's repositories | |
| The following example prints the number of watchers for each repository | |
| associated with the `defunkt` user. | |
| ```java | |
| RepositoryService service = new RepositoryService(); | |
| for (Repository repo : service.getRepositories("defunkt")) | |
| System.out.println(repo.getName() + " Watchers: " + repo.getWatchers()); | |
| ``` | |
| ### Merge a Pull Request | |
| The following example checks if Pull Request #45 is mergeable and if it is then | |
| it automatically merges it. | |
| ```java | |
| PullRequestService service = new PullRequestService(); | |
| service.getClient().setCredentials("user", "passw0rd"); | |
| RepositoryId repo = new RepositoryId("rails", "rails"); | |
| if (service.getPullRequest(repo, 45).isMergeable()) | |
| service.merge(repo, 45, "merging a pull request"); | |
| ``` | |
| ### Fork a repository | |
| The following examples forks the `rails/rails` repository into the currently | |
| authenticated user's account. | |
| ```java | |
| RepositoryService service = new RepositoryService(); | |
| service.getClient().setCredentials("user", "passw0rd"); | |
| RepositoryId toBeForked = new RepositoryId("rails", "rails"); | |
| service.forkRepository(toBeForked); | |
| ``` | |
| ### Creating a Gist | |
| The following examples creates a [Gist](https://gist.github.com/) that contains | |
| a single file. | |
| ```java | |
| GistFile file = new GistFile(); | |
| file.setContent("System.out.println(\"Hello World\");"); | |
| Gist gist = new Gist(); | |
| gist.setDescription("Prints a string to standard out"); | |
| gist.setFiles(Collections.singletonMap("Hello.java", file)); | |
| GistService service = new GistService(); | |
| service.getClient().setCredentials("user", "passw0rd"); | |
| gist = service.createGist(gist); //returns the created gist | |
| ``` | |
| ### Using GitHub Enterprise | |
| Clients use an address of `api.github.com` by default but this can be | |
| overridden when the client is created for the case where you are using | |
| [GitHub Enterprise](http://enterprise.github.com/). | |
| ```java | |
| GitHubClient client = new GitHubClient("github.mycompany.com"); | |
| UserService service = new UserService(client); | |
| service.getUser("internaluser"); | |
| ``` | |
| ## Building | |
| The GitHub Java API is built using [Apache Maven](http://maven.apache.org/). | |
| Run the following command to build a JAR file containing the GitHub Java API | |
| without dependencies: | |
| `$ mvn -f pom-jar.xml clean install` | |
| ### All-in-one | |
| The GitHub Java API can also be built as a JAR that includes all the | |
| dependencies (Google Gson). This technique uses | |
| the [Maven Shade Plugin](http://maven.apache.org/plugins/maven-shade-plugin/) to | |
| build an all-in-one JAR file. | |
| `$ mvn -f pom-jar.xml clean install -P shade` | |