Задание локального местоположения локального хранилища Maven в качестве параметра CLI

Можно ли установить расположение локального репозитория Maven в качестве аргумента в командной строке Maven?

Дело в том, что я не использую значение по умолчанию в ~/.m2/repository. Однако я проверил некоторый проект, который строится со своими настройками с помощью -s settings.xml. Этот параметр settings.xml не указывает мой локальный репозиторий, поэтому Maven использует снова использование ~/.m2/repository... Я хотел бы использовать локальное местоположение репозитория не по умолчанию, не добавляя элемент <localRepository> в settings.xml проекта.

Я пробовал

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

но ни один из этих параметров не работает.

Итак, я думаю, что я должен решить, буду ли я модифицировать сторонний параметр .xml или переместить свое местное репо на ~

Ответ 1

Использовать свойство maven maven.repo.local:

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

Никаких изменений в settings.xml не требуется.

Ответ 2

Для мерзавца:

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

Это использует отдельный репозиторий maven в каждом репозитории git

Ответ 3

Один из хакеров, который будет работать:

  • Добавьте <localRepository>${m2.localRepository}</localRepository> в ваши settings.xml
  • В вашем mvn.sh или mvn.bat добавьте -Dm2.localRepository=<full path to home dir>/.m2/repository перед "$ @" в команде, которая будет выполнена. Это сделает ваше местное репо по умолчанию, где оно должно быть.
  • Теперь вы можете использовать mvn -Dm2.localRepository=... <phases/goals>. Поскольку ваше системное свойство командной строки добавляется в командную строку после той, что находится в mvn script, это будет иметь приоритет. (По крайней мере, я уверен, что он работает именно так на обоих окнах и в Linux, но тестирование покажет.)