--- title: Working with the Apache Maven registry 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 - /packages/using-github-packages-with-your-projects-ecosystem/configuring-apache-maven-for-use-with-github-packages - /packages/guides/configuring-apache-maven-for-use-with-github-packages versions: fpt: '*' ghes: '*' ghae: '*' ghec: '*' shortTitle: Apache Maven registry --- {% data reusables.package_registry.packages-ghes-release-stage %} {% data reusables.package_registry.packages-ghae-release-stage %} {% data reusables.package_registry.admins-can-configure-package-types %} ## Authenticating to {% data variables.product.prodname_registry %} {% data reusables.package_registry.authenticate-packages %} {% data reusables.package_registry.authenticate-packages-github-token %} ### 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 {% ifversion ghes or ghae %}*HOSTNAME* with the host name of {% data variables.product.product_location %}, and{% endif %} *OWNER* with the name of the user or organization account that owns the repository. Because uppercase letters aren't supported, you must use lowercase letters for the repository owner even if the {% data variables.product.prodname_dotcom %} user or organization name contains uppercase letters. 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 %} {% ifversion ghes %} If your instance has subdomain isolation enabled: {% endif %} ```xml github github central https://repo1.maven.org/maven2 github https://{% ifversion fpt or ghec %}maven.pkg.github.com{% else %}maven.HOSTNAME{% endif %}/OWNER/REPOSITORY true github USERNAME TOKEN ``` {% ifversion ghes %} If your instance has subdomain isolation disabled: ```xml github github central https://repo1.maven.org/maven2 github HOSTNAME/_registry/maven/OWNER/REPOSITORY true github USERNAME TOKEN ``` {% endif %} ## 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 {% ifversion ghes or ghae %}*HOSTNAME* with the host name of {% data variables.product.product_location %}, {% 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.{% ifversion ghes %} If your instance has subdomain isolation enabled:{% endif %} ```xml github GitHub OWNER Apache Maven Packages https://{% ifversion fpt or ghec %}maven.pkg.github.com{% else %}maven.HOSTNAME{% endif %}/OWNER/REPOSITORY ```{% ifversion ghes %} If your instance has subdomain isolation disabled: ```xml github GitHub OWNER Apache Maven Packages https://HOSTNAME/_registry/maven/OWNER/REPOSITORY ```{% endif %} {% data reusables.package_registry.checksum-maven-plugin %} 1. 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. ```xml com.example test 1.0.0-SNAPSHOT ``` {% data reusables.package_registry.checksum-maven-plugin %} 3. Install the package. ```shell $ mvn install ``` ## Further reading - "[Working with the Gradle registry](/packages/working-with-a-github-packages-registry/working-with-the-gradle-registry)" - "{% ifversion fpt or ghes > 3.0 or ghec or ghae %}[Deleting and restoring a package](/packages/learn-github-packages/deleting-and-restoring-a-package){% elsif ghes < 3.1 %}[Deleting a package](/packages/learn-github-packages/deleting-a-package){% endif %}"