Skip to content

Publishing -SNAPSHOT Releases⚓︎

-SNAPSHOT releases are intended for developers to make pre-release versions of their projects available for testing. While the versions of components retrieved from Maven Central are guaranteed to not change, -SNAPSHOT versions are intended to be overwritten. This enables developers to work with the latest version of a library without needing to update their dependencies repeatedly.

As -SNAPSHOT releases are not final releases on Maven Central, they are not subject to the same guarantees. Specifically, -SNAPSHOT releases are cleaned up after a period of time (currently 90 days). We believe that this should be sufficient, as projects under active development will be pushing new versions of the same -SNAPSHOT component with some frequency.

As with the legacy OSSRH -SNAPSHOT publishing, no validation is performed. If you wish to test releases that have gone through validation, we have a feature that enables integrating your deployment files into your build for purposes of manually testing a release before it reaches Maven Central.

Enabling -SNAPSHOT Releases For Your Namespace⚓︎

Prerequisites

If you have not yet registered a namespace, please follow our namespace registration documentation.

First, navigate to the namespaces page. Find the namespace you plan on publishing -SNAPSHOT releases to and click on its dropdown menu.

A screenshot of a row in the namespaces list with a red arrow that points to
the three dot icon of the dropdown menu on the
right

From there, select the "Enable SNAPSHOTs" menu option.

A screenshot of the menu that is displayed with a red arrow to the very bottom
option titled Enable SNAPSHOTs

This will open a confirmation popup. Selecting "Confirm" on the popup will enable -SNAPSHOT publishing on that namespace. You will then see a badge on the namespace indicating that -SNAPSHOT publishing is enabled.

A screenshot of the same row in the namespaces list with a red arrow that
points to the badge that says SNAPSHOTs
enabled

Publishing -SNAPSHOT Releases For Your Project⚓︎

Because publishing -SNAPSHOT releases does not perform validation on the component(s), a mvn deploy-compatible API was chosen for maximum ecosystem compatibility.

Publishing with the central-publishing-maven-plugin⚓︎

The central-publishing-maven-plugin supports snapshot releases directly. Publishing with a -SNAPSHOT version will automatically upload the component to the right location. Please be sure that you are using a version of the plugin equal to or newer than 0.7.0.

If you want to publish your snapshots to your own hosting repository, the plugin respects Maven's <distributionManagement> configuration (Maven Documentation), which should allow you to configure a location for your -SNAPSHOT releases. Specifically, you will need to configure a <snapshotRepository> or a <repository> with <snapshots><enabled>true</enabled></snapshots>.

Publishing via other methods⚓︎

Since this feature is new, third-party plugins may take time to support it. For now, you will be able to fall back on publishing via your build tool of choice's support for -SNAPSHOT releases.

For Maven, you can use the default Maven Deploy Plugin configured with <distributionManagement> with the URL https://central.sonatype.com/repository/maven-snapshots/.

For Gradle, you can use the default Maven Publish plugin. You'll want to configure a maven repository with the url of https://central.sonatype.com/repository/maven-snapshots/ (relevant documentation).

Consuming -SNAPSHOT Releases For Your Project⚓︎

Snapshots can be observed via the directory listing.

Consuming Via Maven⚓︎

Configure your pom.xml file with the following <repositories> section:

<repositories>
  <repository>
    <name>Central Portal Snapshots</name>
    <id>central-portal-snapshots</id>
    <url>https://central.sonatype.com/repository/maven-snapshots/</url>
    <releases>
      <enabled>false</enabled>
    </releases>
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
  </repository>
</repositories>

Consuming Via Gradle⚓︎

Configure your build.gradle file with the following:

repositories {
  maven {
    name = 'Central Portal Snapshots'
    url = 'https://central.sonatype.com/repository/maven-snapshots/'

    // Only search this repository for the specific dependency
    content {
      includeModule("<the snapshot's groupId>", "<the snapshot's artifactId>")
    }
  }
  mavenCentral()
}