Где находится файл settings.xml для настройки Maven?
Что проверяют
Работали ли вы с Maven дальше mvn clean install: знаете ли, что файлов настроек два, как они сливаются и что в них держат. Следом обычно спрашивают, где хранить пароль от корпоративного Nexus и чем settings.xml отличается от pom.xml.
Как отвечать
- пользовательский:
${user.home}/.m2/settings.xml, то есть~/.m2/settings.xmlна Linux и macOS и%USERPROFILE%\.m2\settings.xmlна Windows. По умолчанию его нет, файл создают руками; - глобальный:
${maven.home}/conf/settings.xmlв каталоге установки Maven, действует для всех пользователей машины.
Оба файла сливаются, при совпадении настроек побеждает пользовательский. Пути переопределяются флагами -s и -gs, это частый приём в CI. Итог показывает mvn help:effective-settings, а mvn -X в начале лога пишет, какие файлы реально прочитаны.
Главное отличие от pom.xml: он описывает проект и лежит в репозитории, а settings.xml описывает окружение конкретной машины и в репозиторий не попадает. Поэтому в нём держат:
<servers>: логины и пароли к репозиториям.<id>сервера должен совпадать сidрепозитория вpom.xml;<mirrors>: подмену Maven Central на корпоративный Nexus или Artifactory через<mirrorOf>*</mirrorOf>;- остальное:
<proxies>,<profiles>с<activeProfiles>,<localRepository>для переноса локального кэша.
Пароли открытым текстом не пишут: в Maven 3 их шифруют через mvn --encrypt-master-password и settings-security.xml или подставляют из переменных окружения как ${env.NEXUS_PASSWORD}.
Где спотыкаются
Называют один путь и не знают про глобальный файл. Потом правят conf/settings.xml внутри дистрибутива, и после обновления Maven настройки пропадают.
Получают 401 при деплое и ищут ошибку в пароле, хотя на самом деле <id> в <servers> не совпадает с id в distributionManagement.
Забывают про окружение сборки: в Docker под root домашний каталог это /root, а Maven Wrapper качает свой дистрибутив в ~/.m2/wrapper, и глобальный файл у него свой. В итоге настройки «не подхватываются», хотя файл вроде бы на месте.