How to differentiate between deploying releases vs snapshots
MavenMaven Problem Overview
I may be missing something extremely obvious, but I need some clarification regardless. I am about to begin development using maven and archiva. I added both servers + settings to settings.xml, and distributionManagement
tags to the maven POM which I want to deploy.
I put references to both my internal snapshot repo, and my internal release repo in the POM. is there a specific maven command or option, which specifies to deploy as a SNAPSHOT, and NOT to both repos? Or if I do deploy, will it automatically push one copy to each repo?
Can someone clarify this?´
Maven Solutions
Solution 1 - Maven
If your project.version
contains SNAPSHOT
(f.e., 1.2-SNAPSHOT) and you execute mvn deploy
, artifacts will be deployed to your snapshot repository. If it doesn't (f.e., 1.2) - they will be deployed to your release repository.
Solution 2 - Maven
You can execute mvn deploy
.
If your POM version contains SNAPSHOT
as suffix, it will deploy into the repository configured under distributionManagement.snapshotRepository
.
If your POM doesn't contain SNAPSHOT
suffix, it will deploy into the repository configured under distributionManagement.repository
.
However, I do recommend you to use maven-release-plugin
to manage versioning and deployment. By running mvn -B release:clean release:prepare release:perform
, in resume:
- the suffix
SNAPSHOT
is removed from the version (e.g.2.1-SNAPSHOT
->2.1
); - the application is built so as to generate JAR files;
- the code is committed to your code repository (e.g. git) and tagged (e.g.
2.1
); - the JAR is deployed into your release repository (not snapshot repo);
- the version is incremented and the suffix
SNAPSHOT
is added (e.g.2.2-SNAPSHOT
).
Solution 3 - Maven
For me putting a suffix: SNAPSHOT
in ${project.version}
was not enough. I had to put a dash in front of it:-SNAPSHOT
in order for maven to deploy it in the local snapshot repo.