Как получить местоположение локального репо Maven?


84

Есть ли способ получить местоположение локального репо Maven?

Используя следующую команду, вы можете заставить Maven использовать определенный файл настроек:

 mvn -s < path to settings file >

Я знаю, что вы можете редактировать settings.xmlфайл, чтобы указать местоположение репозитория, но могу ли я получить текущее значение по умолчанию с помощью какой-нибудь команды Maven?

Ответы:


126

Если вам нужно только локальное репо, попробуйте следующее:

mvn help:evaluate -Dexpression=settings.localRepository | grep -v '\[INFO\]'

РЕДАКТИРОВАТЬ

Я возвращаюсь к этому спустя годы, потому что в последних версиях плагина справки Maven появился полезный параметр для evaluateназванной цели, forceStdoutкоторый позволяет нам избавиться от необходимости использовать grep для вывода:

mvn help:evaluate -Dexpression=settings.localRepository -q -DforceStdout

2
Я думаю, что вы намеревались. У | grep -v '\[INFO\]' вашего регулярного выражения есть неприятные побочные эффекты.
kubanczyk

у меня работают обе версии, что вы имеете в виду под "неприятными побочными эффектами"?
adutra

3
@adutra Ваше регулярное выражение определяет группу совпадений, состоящую из символов верхнего регистра I, N, F и O. Таким образом, оно будет соответствовать любой из этих строк: INFO, OFNI, I, F, N и т. д. Попробоватьecho -e "INFO\nOFNI\nI\nIfoobar" | grep '[INFO]'
pmr,

3
Это не сработает, если у вас есть предупреждения maven или он загружает зависимости. Следующая команда grep, которая ищет абсолютные пути к файлам, должна работать как в unix, так и в Windows:mvn help:evaluate -Dexpression=settings.localRepository | grep -E '^([a-zA-Z]:|/)'
SiXoS 03

@SiXoS ваш тоже не работал, в моем случае mvn выдавал предупреждения, когда [INFO] Scanning for projects ... и ничего не соответствовал, когда вывод получался grep.
Sajuuk

51

Да, вы можете получить его с помощью опции -Xили --debug, напримерmvn -X

...
[DEBUG] Reading global settings from C:\Maven\conf\settings.xml
[DEBUG] Reading user settings from C:\segphault\.m2\settings.xml
[DEBUG] Using local repository at C:\Repo
...

40

Плагин Maven Help покажет локальные настройки, включая путь к локальному репозиторию.

Вам нужна команда:

mvn help:effective-settings

На выходе будут отображаться настройки в формате XML. Найдите элемент localRepository:

<localRepository xmlns="http://maven.apache.org/SETTINGS/1.1.0">/home/jrs/.mavenRepo</localRepository>

похоже, что если он выдаст предупреждение, вывод не будет в формате XML.
Sajuuk

20

А пока вы можете сделать это более простым способом:

mvn help:evaluate -Dexpression=settings.localRepository -q -DforceStdout

Вы также можете напрямую использовать это, чтобы назначить эту переменную оболочки, например:

RESULT=$(mvn help:evaluate -Dexpression=settings.localRepository -q -DforceStdout)

Важное примечание: используйте самую последнюю версию Maven и, конечно же, самую последнюю версию maven-help-plugin ...

Это будет содержать результат без новой строки и т. Д.


Этот ответ должен быть принятым ответом, поскольку он дает решение, которое дает более чистый результат, чем любое другое решение, предложенное до сих пор.
Zartc 08

Это нарушено по крайней мере на некоторых платформах / конфигурациях. Для меня (fc 28, Maven 3.5.2) -q не дает вывода, хотя без -q свойство есть, но его нужно удалить.
Павел Веселов

5

Он должен находиться в каталоге /home/.m2, вероятно, папка скрыта. Итак, вам нужно Ctrl + H, чтобы увидеть скрытые папки.


4

Для пользователей Windows

Обычно это в: C:\Users\USER_NAME\.m2\repository.
Однако mvn help:effective-settingsкоманда обязательно покажет локальный путь в ответе xml.


Более общий: ${user.home}/.m2/repositoryэто значение по умолчанию, которое можно переопределить в settings.xml . mvn help:effective-settings был упомянут в ответе здесь более 6 лет назад: stackoverflow.com/a/6670563/1744774 .
Герольд Брозер,

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.