Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I deploy only the pom file to my snapshot repository in Maven?

I would like to be able to deploy only the POM artifact (file) without the main artifact (JAR, WAR, etc), when running mvn deploy and version is a SNAPSHOT version.

Why?

We several developers working on multiple Maven projects. We have a Hudson server with a job per Maven project and version (e.g. foo-1.2, foo-1.3). Each job builds the project and deploys it to a Nexus server (upon success). Maven projects under development are marked as such by using -SNAPSHOT postfix in the version. For example: 1.2-SNAPSHOT, 1.3-SNAPSHOT.

Here's a sample scenario how a developer work is damaged due to this architecture.

Assume two Maven projects: foo-core and foo-webapp, both at version 1.2-SNAPSHOT.

  • Developer A is working on foo-core, made several changes and compiled it.
  • Developer A continues to work, but on foo-webapp.
  • Developer B started working and changing foo-core. It commits his work and pushes it to the SCM.
  • Hudson is triggered by SCM; Builds foo-core and deploys it to the snapshot repository in Nexus.
  • Developer A is running mvn install on foo-webapp. Maven is checking with Nexus, and finds that there is a newer version of foo-core in Nexus. It downloads it (filled with developer B changes) and than it fails compilation, since the changes made by developer A are not in the jar located in the local repository. The download overrides the file installed there by developer A.

Existing Solutions

I looked into maven-deploy-plugin, but this plugin deploys all artifacts attached to the project. If they had a way to configure which artifacts to deploy, it would have been great.

Question: Is there any way to solve this without resorting to writing my own deploy plugin, based on maven-deploy-plugin?

like image 907
Asaf Mesika Avatar asked May 26 '11 10:05

Asaf Mesika


People also ask

What does mvn clean deploy do?

This command invokes the clean phase and then the install phase sequentially: clean : removes files generated at build-time in a project's directory ( target by default) install : installs the package into the local repository, for use as a dependency in other projects locally.

What is a snapshot repository Maven?

A Maven snapshot is a special version of a Maven package that refers to the latest production branch code. It is a development version that precedes the final release version. You can identify a snapshot version of a Maven package by the suffix SNAPSHOT that is appended to the package version.

What is the purpose of the deploy plugin for Apache Maven?

The deploy plugin is primarily used during the deploy phase, to add your artifact(s) to a remote repository for sharing with other developers and projects. This is usually done in an integration or release environment.


1 Answers

Basically to the -Dfile parameter, instead of the artifact, pass the pom.xml. Run the command and yay! mvn deploy won't give you any issues now. Here's a sample deploy command :

$ mvn deploy:deploy-file -DpomFile=pom.xml -Dfile=./pom.xml -DgroupId=my.group.id -DartifactId=artifact-id -DrepositoryId=bigdata-upload-snapshots -Durl=http://maven.mymaven.com/content/repositories/snapshots/

A prerequisite for this is that the repository be added in your settings.xml

[Edit]: I have supplied the parameters -DgroupId and -DartifactId of the project in the sample deploy command but they're not required (refer to Zac's comment below)

like image 114
Karishma Gulati Avatar answered Oct 15 '22 03:10

Karishma Gulati