Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Release a snapshot to nexus using maven 3.0.5

I am unable to release a snapshot version of an artifact which I build using maven to nexus. The version of my artifact states 1.0.0-SNAPSHOT.

I can execute mvn clean install without an issue. But when I try to deploy using mvn deploy , I get the following error :

Return code is: 400, ReasonPhrase: Repository version policy: RELEASE does not allow version: 1.0.0-20161019.214318-1. -> [Help 1]

According to what I was able to find out was that maven3 adds the timestamp instead of the SNAPSHOT suffix on the artifact that I want to deploy. The <uniqueVersion> tag of maven is not supported in maven3. What is the approach that I need to take to deploy these artifacts using mvn deploy command.

Updated : pom.xml

   <distributionManagement>
    <repository>
      <id>my-nexus-snapshots</id>
      <name>Internal Snapshot Releases</name>
      <url>http://localhost:9999/repository/maven-snapshots/</url>
    </repository>
    <snapshotRepository>
      <id>my-nexus-releases</id>
      <name>Internal Releases</name>
      <url>http://localhost:9999/repository/maven-releases/</url>
    </snapshotRepository>
  </distributionManagement>

settings.xml

    <server>
        <id>my-nexus-snapshots</id>
        <username>user</username>
        <password>user123</password>
    </server>
    <server>
        <id>my-nexus-releases</id>
        <username>user</username>
        <password>user123</password>
    </server>
like image 754
hYk Avatar asked Oct 19 '16 21:10

hYk


People also ask

What is difference between snapshot and release in Nexus?

By definition, snapshots are mutable, releases are immutable. This is why Nexus makes you store them separately because usually you don't care if you lose snapshots, but you will care if you lose releases. It makes snapshot cleanup much easier to deal with that way.

What is snapshot vs release?

Release repositories hold releases and Snapshot repositories hold snapshots. In maven a snapshot is defined as an artifact with a version ending in -SNAPSHOT. When deployed, the snapshot is turned into a timestamp. By definition, snapshots are mutable, releases are immutable.

What is a snapshot release?

Snapshot releases are intended to provide a mechanism for more frequent and more regular incremental updates of our software that may not warrant the effort of an upgrade for all users at all stages.


2 Answers

Usually, your nexus has separate repositories "snapshots" and "releases". SNAPSHOT versions are deployed to the former, non-SNAPSHOT versions to the latter. For deployment, these repositories have to be specified by you. You can do this by adding the distributionManagement section to your pom. There you can define specific targets for both targets.

<distributionManagement>
  <repository>
    <id>releases</id>
    <name>releases</name>
    <url>http://somerepo:8081/nexus/content/repositories/releases/</url>
  </repository>
  <snapshotRepository>
    <id>snapshots</id>
    <name>snapshots</name>
    <url>http://somerepo:8081/nexus/content/repositories/snapshots/</url>
  </snapshotRepository>
</distributionManagement>
like image 129
J Fabian Meier Avatar answered Oct 12 '22 14:10

J Fabian Meier


If you are using Gradle it can be done in your repositories settings.
Just add the maven-snapshots url

For example:

 repositories {
        maven {
            url = 'http://nexus.something.com/repository/maven-central/'
        }
        maven {
            url = 'http://nexus.something.com/repository/maven-releases/'
        }
        maven {
            url = 'http://nexus.something.com/repository/maven-snapshots/'
        }
    }
like image 45
Dias Abdraimov Avatar answered Oct 12 '22 14:10

Dias Abdraimov