Deploying files with maven-deploy-plugin
11.02.2019 by Dirk OlmesWe 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 \
-Dfiles=my-lib-1.0-sources.jar,mylib-1.0-tests.jar,my-lib-1.0-test-sources.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.
Comments
There are no comments yet.