> For the complete documentation index, see [llms.txt](https://developer.harness.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.harness.io/artifact-registry/new-to-artifact-registry/quickstart/maven-quickstart.md).

# Maven

{% @harness-package-selector/package-selector platforms="%5B%7B%22label%22%3A%22Docker%22%2C%22slug%22%3A%22docker%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fdocker-quickstart%22%7D%2C%7B%22label%22%3A%22Helm%22%2C%22slug%22%3A%22helm%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fhelm-quickstart%22%7D%2C%7B%22label%22%3A%22Helm%20HTTP%22%2C%22slug%22%3A%22helm-http%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fhelm-http-quickstart%22%7D%2C%7B%22label%22%3A%22Generic%22%2C%22slug%22%3A%22generic%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fgeneric-quickstart%22%7D%2C%7B%22label%22%3A%22Raw%20File%22%2C%22slug%22%3A%22raw-file%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fraw-file-quickstart%22%7D%2C%7B%22label%22%3A%22Maven%22%2C%22slug%22%3A%22maven%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fmaven-quickstart%22%7D%2C%7B%22label%22%3A%22Python%22%2C%22slug%22%3A%22python%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fpython-quickstart%22%7D%2C%7B%22label%22%3A%22NPM%22%2C%22slug%22%3A%22npm%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fnpm-quickstart%22%7D%2C%7B%22label%22%3A%22Nuget%22%2C%22slug%22%3A%22nuget%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fnuget-quickstart%22%7D%2C%7B%22label%22%3A%22RPM%22%2C%22slug%22%3A%22rpm%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Frpm-quickstart%22%7D%2C%7B%22label%22%3A%22Debian%22%2C%22slug%22%3A%22debian%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fdebian-quickstart%22%7D%2C%7B%22label%22%3A%22Alpine%22%2C%22slug%22%3A%22alpine%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Falpine-quickstart%22%7D%2C%7B%22label%22%3A%22Wolfi%22%2C%22slug%22%3A%22wolfi%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fwolfi-quickstart%22%7D%2C%7B%22label%22%3A%22Cargo%22%2C%22slug%22%3A%22cargo%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fcargo-quickstart%22%7D%2C%7B%22label%22%3A%22Conan%22%2C%22slug%22%3A%22conan%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fconan-quickstart%22%7D%2C%7B%22label%22%3A%22Go%22%2C%22slug%22%3A%22go%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fgo-quickstart%22%7D%2C%7B%22label%22%3A%22Hugging%20Face%22%2C%22slug%22%3A%22hugging-face%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fhugging-face-quickstart%22%7D%2C%7B%22label%22%3A%22Conda%22%2C%22slug%22%3A%22conda%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fconda-quickstart%22%7D%2C%7B%22label%22%3A%22Dart%22%2C%22slug%22%3A%22dart%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fdart-quickstart%22%7D%2C%7B%22label%22%3A%22PHP%20Composer%22%2C%22slug%22%3A%22php-composer%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fphp-composer-quickstart%22%7D%2C%7B%22label%22%3A%22Swift%22%2C%22slug%22%3A%22swift%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fswift-quickstart%22%7D%2C%7B%22label%22%3A%22Puppet%22%2C%22slug%22%3A%22puppet%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fpuppet-quickstart%22%7D%2C%7B%22label%22%3A%22Terraform%22%2C%22slug%22%3A%22terraform%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fterraform-quickstart%22%7D%2C%7B%22label%22%3A%22R%20(CRAN)%22%2C%22slug%22%3A%22r-cran%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Fr-cran-quickstart%22%7D%2C%7B%22label%22%3A%22RubyGems%22%2C%22slug%22%3A%22rubygems%22%2C%22path%22%3A%22artifact-registry%2Fnew-to-artifact-registry%2Fquickstart%2Frubygems-quickstart%22%7D%5D" selectedPlatform="maven" %}

### Prerequisites <a href="#prerequisites" id="prerequisites"></a>

* Ensure you have the **Maven CLI** (`mvn`) installed on your local machine.
* Access to a Harness account with appropriate permissions to create registries and connectors.

***

### Create a Maven Artifact Registry <a href="#create-a-maven-artifact-registry" id="create-a-maven-artifact-registry"></a>

{% tabs %}
{% tab title="Interactive Guide" %}
{% embed url="<https://app.tango.us/app/embed/511932ac-8ac1-4db9-ab6a-3296e6974949?skipCover=false&defaultListView=false&skipBranding=false&makeViewOnly=true&hideAuthorAndDetails=true>" %}
Creating a New Maven Artifact Registry
{% endembed %}
{% endtab %}

{% tab title="Step-by-Step" %}

1. Navigate to the Artifact Registry module in your Harness project.
2. Click on **New Artifact Registry**.
3. In the Registry Type dropdown, select **Maven Registry**.
4. Provide a **Registry Name**.

{% hint style="info" %}
**REGISTRY NAME CRITERIA**

Your registry name must start with a letter and can include `lowercase alphanumerics`, `_`, `.` and `-`.
{% endhint %}

5. Optionally, add a Description and Labels for better organization.
6. Choose visibility between **Public** and **Private**.
7. Click **Create Registry** to finalize.
   {% endtab %}
   {% endtabs %}

{% hint style="info" %}
**PRIVATE REGISTRY**

This registry will serve as your private Maven registry within Harness.
{% endhint %}

***

### Configure an Upstream Proxy (Optional) <a href="#configure-an-upstream-proxy-optional" id="configure-an-upstream-proxy-optional"></a>

An upstream proxy allows your registry to fetch Maven packages from external sources if they are not available locally.

{% tabs %}
{% tab title="Interactive Guides" %}

#### Create an upstream proxy

{% embed url="<https://app.tango.us/app/embed/38a8dc51-7c77-4507-b136-d02a06857bc3?skipCover=false&defaultListView=false&skipBranding=false&makeViewOnly=true&hideAuthorAndDetails=true>" %}
Create Maven Upstream Proxy in Harness
{% endembed %}

#### Configure the upstream proxy in your registry

{% embed url="<https://app.tango.us/app/embed/088d658d-43cc-48b4-988c-4dca211fe78c?skipCover=false&defaultListView=false&skipBranding=false&makeViewOnly=true&hideAuthorAndDetails=true>" %}
Configure Maven Upstream Proxy
{% endembed %}
{% endtab %}

{% tab title="Step-by-Step" %}

#### Create an upstream proxy

1\. In the Artifact Registry module, click the dropdown next to \*\*New Artifact Registry\*\* and select \*\*Upstream Proxy\*\*. 2. Choose \*\*Maven Registry\*\* as the proxy type. 3. Click \*\*Create Proxy\*\* to establish the connection.

#### Configure the upstream proxy in your registry

1\. In the Artifact Registry module, select an existing Artifact Registry. 2. Select the \*\*Configuration\*\* tab. 3. Under \*\*Advanced (Optional)\*\*, select \*\*Configure Upstream\*\*. 4. Select from the list of compatible proxies to add them to your registry. 5. Click \*\*Save\*\* to save the configuration.
{% endtab %}
{% endtabs %}

{% hint style="info" %}
**UPSTREAM PROXY CACHING**

If a Maven package isn’t found in your Harness registry, the upstream proxy fetches it from an external registry like Maven Central, reducing duplication and improving resolution.
{% endhint %}

***

### Push & Pull Maven Packages <a href="#push-and-pull-maven-packages" id="push-and-pull-maven-packages"></a>

#### Authenticate the CLI with the Harness Registry <a href="#authenticate-the-cli-with-the-harness-registry" id="authenticate-the-cli-with-the-harness-registry"></a>

1. In your Harness Maven Artifact Registry, click **Setup Client**.
2. Click **Generate Identity Token** to generate a new token that serves as the password for uploading and downloading artifacts.

#### Publish a Package to the Registry <a href="#publish-a-package-to-the-registry" id="publish-a-package-to-the-registry"></a>

1. Set default repository in your `pom.xml` file.

```xml
<distributionManagement>
  <snapshotRepository>
    <id>maven-dev</id>
    <url>https://pkg.harness.io/pkg/<account-id>/<maven-registry>/maven</url>
  </snapshotRepository>
  <repository>
    <id>maven-dev</id>
    <url>https://pkg.harness.io/pkg/<account-id>/<maven-registry>/maven</url>
  </repository>
</distributionManagement>
```

2. Copy the following your \~/ .m2/setting.xml file for MacOs, or $USERPROFILE$\ .m2\settings.xml for Windows to authenticate with token to push to your Maven registry.

```xml
<settings>
  <servers>
    <server>
      <id>maven-dev</id>
      <username>username</username>
      <password>identity-token</password>
    </server>
  </servers>
</settings>
```

3. Publish the package:

```bash
mvn deploy
```

#### Pull a Package from the Registry <a href="#pull-a-package-from-the-registry" id="pull-a-package-from-the-registry"></a>

Set default repository in your pom.xml file.

1. Set the default registry in your pom.xml file by adding the following:

```xml
<repositories>
  <repository>
    <id>maven-dev</id>
    <url>https://pkg.harness.io/pkg/<account-id>/<maven-registry>/maven</url>
    <releases>
      <enabled>true</enabled>
      <updatePolicy>always</updatePolicy>
    </releases>
    <snapshots>
      <enabled>true</enabled>
      <updatePolicy>always</updatePolicy>
    </snapshots>
  </repository>
</repositories>
```

2. Copy the following your \~/ .m2/settings.xml file for MacOs, or $USERPROFILE$\ .m2\settings.xml for Windows to authenticate with token to pull from your Maven registry.

```xml
<settings>
  <servers>
    <server>
      <id>maven-dev</id>
      <username>username</username>
      <password>identity-token</password>
    </server>
  </servers>
</settings>
```

3. Add a dependency to the project's pom.xml (replace *GROUP\_ID*, *ARTIFACT\_ID* & *VERSION* with your own):

```xml
<dependency>
  <groupId><GROUP_ID></groupId>
  <artifactId><ARTIFACT_ID></artifactId>
  <version><VERSION></version>
</dependency>
```

4. Pull the package:

```bash
mvn install
```

{% hint style="info" %}
**USAGE**

These commands upload or retrieve Maven packages between your local project and the Harness registry.
{% endhint %}

***
