--- title: Configuring Apache Maven for use with GitHub Packages intro: 'You can configure Apache Maven to publish packages to {% data variables.product.prodname_registry %} and to use packages stored on {% data variables.product.prodname_registry %} as dependencies in a Java project.' product: '{% data reusables.gated-features.packages %}' redirect_from: - /articles/configuring-apache-maven-for-use-with-github-package-registry - /github/managing-packages-with-github-package-registry/configuring-apache-maven-for-use-with-github-package-registry - /github/managing-packages-with-github-packages/configuring-apache-maven-for-use-with-github-packages versions: free-pro-team: '*' enterprise-server: '>=2.22' --- {% data reusables.package_registry.packages-ghes-release-stage %} {% data reusables.package_registry.admins-can-configure-package-types %} ### Authenticating to {% data variables.product.prodname_registry %} {% data reusables.package_registry.authenticate-packages %} #### Authenticating with a personal access token {% data reusables.package_registry.required-scopes %} You can authenticate to {% data variables.product.prodname_registry %} with Apache Maven by editing your *~/.m2/settings.xml* file to include your personal access token. Create a new *~/.m2/settings.xml* file if one doesn't exist. In the `servers` tag, add a child `server` tag with an `id`, replacing *USERNAME* with your {% data variables.product.prodname_dotcom %} username, and *TOKEN* with your personal access token. In the `repositories` tag, configure a repository by mapping the `id` of the repository to the `id` you added in the `server` tag containing your credentials. Replace {% if currentVersion != "free-pro-team@latest" %}*HOSTNAME* with the host name of your {% data variables.product.prodname_ghe_server %} instance, {% endif %}*REPOSITORY* with the name of the repository you'd like to publish a package to or install a package from, and *OWNER* with the name of the user or organization account that owns the repository. {% data reusables.package_registry.lowercase-name-field %} If you want to interact with multiple repositories, you can add each repository to separate `repository` children in the `repositories` tag, mapping the `id` of each to the credentials in the `servers` tag. {% data reusables.package_registry.apache-maven-snapshot-versions-supported %} {% if currentVersion != "free-pro-team@latest" %} If your instance has subdomain isolation enabled: {% endif %} ``` github github central https://repo1.maven.org/maven2 true true github GitHub OWNER Apache Maven Packages https://{% if currentVersion == "free-pro-team@latest" %}maven.pkg.github.com{% else %}maven.HOSTNAME{% endif %}/OWNER/REPOSITORY github USERNAME TOKEN ``` {% if currentVersion != "free-pro-team@latest" %} If your instance has subdomain isolation disabled: ``` github github central https://repo1.maven.org/maven2 true true github GitHub OWNER Apache Maven Packages https://HOSTNAME/_registry/maven/OWNER/REPOSITORY github USERNAME TOKEN ``` {% endif %} #### Authenticating with the `GITHUB_TOKEN` {% data reusables.package_registry.package-registry-with-github-tokens %} ### Publishing a package {% data reusables.package_registry.default-name %} For example, {% data variables.product.prodname_dotcom %} will publish a package named `com.example:test` in a repository called `OWNER/test`. If you would like to publish multiple packages to the same repository, you can include the URL of the repository in the `` element of the *pom.xml* file. {% data variables.product.prodname_dotcom %} will match the repository based on that field. Since the repository name is also part of the `distributionManagement` element, there are no additional steps to publish multiple packages to the same repository. For more information on creating a package, see the [maven.apache.org documentation](https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html). 1. Edit the `distributionManagement` element of the *pom.xml* file located in your package directory, replacing {% if currentVersion != "free-pro-team@latest" %}*HOSTNAME* with the host name of your {% data variables.product.prodname_ghe_server %} instance, {% endif %}`OWNER` with the name of the user or organization account that owns the repository and `REPOSITORY` with the name of the repository containing your project. {% if currentVersion != "free-pro-team@latest" %} If your instance has subdomain isolation enabled: {% endif %} ``` github GitHub OWNER Apache Maven Packages https://{% if currentVersion == "free-pro-team@latest" %}maven.pkg.github.com{% else %}maven.HOSTNAME{% endif %}/OWNER/REPOSITORY ``` {% if currentVersion != "free-pro-team@latest" %} If your instance has subdomain isolation disabled: ``` github GitHub OWNER Apache Maven Packages https://HOSTNAME/_registry/maven/OWNER/REPOSITORY ``` {% endif %} 2. Publish the package. ```shell $ mvn deploy ``` {% data reusables.package_registry.viewing-packages %} ### Installing a package To install an Apache Maven package from {% data variables.product.prodname_registry %}, edit the *pom.xml* file to include the package as a dependency. If you want to install packages from more than one repository, add a `repository` tag for each. For more information on using a *pom.xml* file in your project, see "[Introduction to the POM](https://maven.apache.org/guides/introduction/introduction-to-the-pom.html)" in the Apache Maven documentation. {% data reusables.package_registry.authenticate-step %} 2. Add the package dependencies to the `dependencies` element of your project *pom.xml* file, replacing `com.example:test` with your package. ``` com.example test 1.0.0-SNAPSHOT ``` 3. Install the package. ```shell $ mvn install ``` ### Further reading - "[Configuring Gradle for use with {% data variables.product.prodname_registry %}](/packages/using-github-packages-with-your-projects-ecosystem/configuring-gradle-for-use-with-github-packages)" - "[Deleting a package](/packages/publishing-and-managing-packages/deleting-a-package/)"