| # 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` |
| |