Deploying files with maven-deploy-plugin

11.02.2019 by Dirk Olmes

We recently had an outage of our Nexus instance at work. The file system went corrupt, nexus would not start up properly complaining about a corrupted Orient DB.

The blob store was largely left intact. In hindsight I should have tried to rebuild the OrientDB from the blob store using the Repair - Reconcile component database from blob store task. I found out too late while I already had recovered half of our releases from my local maven repository.

I went down the more difficult route of re-uploading artifacts from my local Maven repo into Nexus. While you can upload single artifacts through Nexus’ web GUI this approach did not scale. Instead, I used the maven-deploy-plugin to upload. Each of our artifacts comes with source accompanied, most expose also tests and test sources. So basically an artifact consists of these files:

  • my-lib-1.0.jar
  • my-lib-1.0.pom
  • my-lib-1.0-sources.jar
  • my-lib-1.0-tests.jar
  • my-lib-1.0-test-sources.jar

All these files need to be uploaded together at once. It took me a little while to understand how to build the commandline for the deploy plugin to accomplish this.

The file parameter takes the main jar. The pomFile paramenter taks the pom file. That’s easy. The other files have to be specified using a more convoluted format. Each file name has to specify its classifier and its type, appended to the separate classifiers and types lists. Finally the files list must specify the full file names. A look at the example will make more sense:

mvn deploy:deploy-file \
    -Dmaven.repo.local=/tmp/maven-repo \
    -Durl=http://nexus.local/repository/releases \
    -DrepositoryId=releases \
    -Dfile=my-lib-1.0.jar \
    -DpomFile=my-lib-1.0.pom \
    -Dclassifiers=sources,tests,test-sources \
    -Dtypes=jar,jar,jar \

You may have noticed that I’m specifying a separate local repository to use during the upload. This is because Maven refuses to upload artifacts from the repo it’s currently operating on. Simply using a throw-away temporary local repo helps minimize the amount of fiddling around with local files.


There are no comments yet.

Leave a comment
Your name: