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

84

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

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

 mvn -s < path to settings file >

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

code-gijoe
источник

Ответы:

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>
JRS
источник
похоже, что если он выдаст предупреждение, вывод не будет в формате 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 .
Герольд Брозер,
-1

Вы можете добиться этого, включив режим отладки, используя эту -Xопцию и найдите строку, в которой упоминается используемый локальный репозиторий.

Харшит Шарма
источник
Об этом упоминалось в ответе здесь более 8 лет назад: stackoverflow.com/a/5916233/1744774 .
Герольд Брозер,