Як отримати місцевий репозиторій 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

@SiXoS ваш також не працював, у моєму випадку mvn видавав попередження під час [INFO] Сканування проектів .... і не збігався з жодною річчю, коли вихідні дані отримують звук.
Саджук

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 відображатиме локальні налаштування, включаючи шлях до локального сховища.

Вам потрібна команда:

mvn help:effective-settings

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

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

схоже, якщо воно видає попередження, вихід не буде у форматі XML.
Саджук

20

У той же час ви можете зробити це більш простим способом:

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

Ви також можете безпосередньо використовувати це для призначення такої змінної оболонки:

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

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

Це буде містити результат без нового рядка тощо.


Ця відповідь повинна бути прийнятою відповіддю, оскільки вона дає рішення, яке покращує результат, ніж будь-яке інше рішення, запропоноване до цього часу.
Zartc

Це порушено принаймні на деяких платформах / конфігураціях. Для мене (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 .
Gerold Broser

-1

Ви можете досягти цього, увімкнувши режим налагодження, скориставшись -Xопцією, і з’ясувати рядок із згадуванням використовуваного локального сховища.


Про це згадувалось у відповіді тут понад 8 років тому: stackoverflow.com/a/5916233/1744774 .
Gerold Broser
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.