Specifying Maven's local repository location as a CLI parameter

Maven

Maven Problem Overview


Is it possible to set the location of the local Maven repository as argument on the Maven command line?

The thing is that I don't use the default one in ~/.m2/repository. However I checked out some project that is being built with its own settings with -s settings.xml. That settings.xml doesn't specify my local repository, so Maven uses uses ~/.m2/repository again... I would like to use a non-default local repository location without having to add a <localRepository> element in the project's settings.xml

I've tried

  • -DlocalRepository="..."
  • $mvn invoker:run -s settings.xml clean install -DskipTests -DlocalRepositoryPath=
  • -Dsettings.localRepository

but none of these options works.

So I think I have to decide whether I will be modifying a third party settings.xml or move my local repo to ~

Maven Solutions


Solution 1 - Maven

use maven property maven.repo.local:

mvn -Dmaven.repo.local=$HOME/.my/other/repository clean install

No modifications to settings.xml are necessary.

Solution 2 - Maven

For git:

alias mvn='mvn "-Dmaven.repo.local=$(git rev-parse --show-toplevel)/.m2/repository"'

This uses a separate maven repository in each git repository

Solution 3 - Maven

One kind of hacky way that would work is:

  1. Add <localRepository>${m2.localRepository}</localRepository> to your settings.xml
  2. In your mvn.sh or mvn.bat, add -Dm2.localRepository=<full path to home dir>/.m2/repository before the "$@" in the command that gets executed. This will make your default local repo stay where it should be.
  3. Now you can use mvn -Dm2.localRepository=... <phases/goals>. Because your command line system property gets added to the command line after the one in the mvn script, it will take precedence. (At least I'm pretty sure it works that way on both windows and linux, but testing will tell.)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionlisakView Question on Stackoverflow
Solution 1 - MavenPetr KozelkaView Answer on Stackoverflow
Solution 2 - MavenAndrew ShermanView Answer on Stackoverflow
Solution 3 - MavenRyan StewartView Answer on Stackoverflow