Команда Maven, чтобы определить, какой файл settings.xml использует Maven


Ответы:


333

Запустите maven с опцией -X (debug) и проверьте начало вывода. Там должно быть что-то вроде этого:

...
[INFO] Error stacktraces are turned on.
[DEBUG] Reading global settings from c:\....\apache-maven-3.0.3\conf\settings.xml
[DEBUG] Reading user settings from c:\....\.m2\settings.xml
[DEBUG] Using local repository at C:\....\repository
...

(Оригинальные имена каталогов удалены мной)


10
Возможно, этого не было в выходных данных отладки, пока не был выпущен maven 3, но ваш пост спустя 2,5 года, наконец, является именно тем ответом, который я искал (извините за 6-месячную задержку в замечании этого).
Harschware

Версия maven, которую я использовал, maven2.x, не показала эту важную деталь при использовании флага -B. ... К сожалению, если вы пытаетесь отладить то, что происходит на сервере Jenkins.
Cognitiaclaeves

168

Ваш комментарий к (правильному) ответу cletus подразумевает наличие нескольких файлов настроек Maven.

Maven всегда использует один или два файла настроек. Глобальные настройки, определенные в ($ {M2_HOME} /conf/settings.xml), всегда обязательны. Файл пользовательских настроек (определенный в $ {user.home} /. M2 / settings.xml) является необязательным. Любые настройки, определенные в пользовательских настройках, имеют приоритет над соответствующими глобальными настройками.

Вы можете переопределить расположение глобальных и пользовательских настроек из командной строки, в следующем примере для глобальных настроек будет установлено значение c: \ global \ settings.xml, а для пользовательских настроек - c: \ user \ settings.xml :

mvn install --settings c:\user\settings.xml 
    --global-settings c:\global\settings.xml

В настоящее время нет никаких свойств или средств, позволяющих установить, из каких файлов пользователя и глобальных настроек использовался Maven. Чтобы получить доступ к этим значениям, вам потребуется изменить MavenCli и / или DefaultMavenSettingsBuilder, чтобы вставить расположения файлов в разрешенный объект настроек.


1
было бы здорово, если бы мы могли предоставить файл settings.xml для нескольких пользователей, чтобы мы могли использовать их, например, в разных проектах. Я знаю, что мы могли бы использовать профиль. Но было бы намного лучше, если бы был отдельный файл. Это не возможно, верно ?! Ура!
деспот

Я искал решение переопределить мои пользовательские настройки только один раз, не вмешиваясь в файл. Поэтому я просто использовал глобальный файл для пользовательских настроек. Т.е. --settings c: \ global \ settings.xml таким образом пользовательский файл был опущен
msp

@despot, опоздал на вечеринку, но таким образом вы можете через несколько определенных профилей и некоторые собственные «триггеры»: maven.apache.org/settings.html#Activation
неделимый

Всегда просят пом в текущей папке. «Для указанной цели требуется выполнить проект, но в этом каталоге нет POM (/). Убедитесь, что вы вызвали Maven из правильного каталога. -> [Help 1]»
Nilesh

137

Вы можете использовать плагин помощи maven, чтобы сообщить вам содержимое ваших пользовательских файлов и файлов глобальных настроек.

mvn help:effective-settings

попросит maven выложить объединенные глобальные и пользовательские настройки .


Это помогает мне обновить старый репозиторий Maven
Рикардо

40

Это файл конфигурации для Maven. Это может быть указано на двух уровнях:

  1. Уровень пользователя. Этот файл settings.xml предоставляет конфигурацию для одного пользователя и обычно предоставляется в $ {user.home} /. M2 / settings.xml.

              NOTE: This location can be overridden with the CLI option:
    
              -s /path/to/user/settings.xml
  2. Глобальный уровень. Этот файл settings.xml предоставляет конфигурацию для всех пользователей Maven на компьютере (при условии, что все они используют одну и ту же установку Maven). Обычно он предоставляется в $ {maven.home} /conf/settings.xml.

              NOTE: This location can be overridden with the CLI option:
    
              -gs /path/to/global/settings.xml

1
собственность M2_HOME, а не maven.home
богатый продавец

Это не важно Если вы установите переменную окружения с помощью maven.home, это не будет проблемой
firstthumb

24

M2_HOMEПеременная среды для глобальной. См. Ссылку «Настройки» :

settingsЭлемент в settings.xmlфайле содержит элементы , используемые для определения значения, настроить выполнение Maven различными способами, как pom.xml, но не должны быть объединены в какой - либо конкретный проект, или распространяться на аудиторию. К ним относятся такие значения, как местоположение локального хранилища, альтернативные серверы удаленного хранилища и информация об аутентификации. Файл settings.xml может находиться в двух местах:

  • Maven установить: $M2_HOME/conf/settings.xml
  • Установка пользователя: ${user.home}/.m2/settings.xml

Если этот ответ подразумевает, что определение хранилища выполняется только путем изучения среды, то это правильный ответ. Я надеялся узнать о ключе командной строки или о чем-то, что дает точный список подходящих путей для всех используемых файлов settings.xml ... Я думаю, что, вероятно, такого механизма нет.
Harschware

3
+1 ответ, Клетус. Я думаю, что стоит упомянуть следующую строку из вашей ссылки «Настройки»:the former settings.xml are also called global settings, the latter settings.xml are referred to as user settings. If both files exists, their contents gets merged, with the user-specific settings.xml being dominant.
Кевин Мередит

Необходимость иметь конкретную конфигурацию машины, чтобы найти частные репозитории, причиняет мне боль. Я понимаю, что это статус-кво в экосистеме Java, но это приводит к ужасно невоспроизводимым установкам сборки.
jpierson

24

Быстрый и грязный метод определения того, использует ли Maven нужный файл settings.xml, сделает его XML недействительным и запустит некоторую безопасную команду maven, которая требует settings.xml.

Если он читает этот файл settings.xml, то Maven сообщает об ошибке: «Ошибка чтения settings.xml ...»


3
Хотя ответ Cletus был очень информативным, этот ответ в самом строгом смысле больше соответствует тому, что я искал (учитывая, что в самом Maven отсутствует механизм представления файлов settings.xml)
harschware,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.