Каков порядок перезаписывания свойств Maven в pom.xml и settings.xml?
сегодня я заметил, что свойства maven, определенные в settings.xml
, переписывают одно в pom.xml
.
Потому что это всего лишь наблюдение, я не уверен, что это абсолютно правильно. Поэтому я ищу ссылку или какую-то статью, но я не нахожу конкретного утверждения о поведении свойств перезаписи, заданных с тем же именем, в settings.xml
и pom.xml
.
Возможно, кто-то может предоставить ссылку на ссылочную часть (которую я могу упустить) или надёжную статью/блог?
Ответы
Ответ 1
На основе документации, по моему мнению, ясно, какой из них имеет приоритет над другим (выдержка из документов):
Если профиль активен из настроек, его значения будут отменять любые эквивалентно ID'd-профилям в файле POM или profiles.xml.
Профили .xml больше не существуют в Maven 3 только в Maven 2.2.1, он поддерживается, но не должен использоваться.
Ответ 2
Я думаю, что свойства с равными именами переопределяются в следующей последовательности (от самого высокого к нижнему контексту):
- Global
- Дескриптор профиля
- За проект
- Для пользователя
http://maven.apache.org/guides/introduction/introduction-to-profiles.html
Следовательно, свойства pom.xml
(для каждого проекта) переопределяются свойствами settings.xml
(для каждого пользователя) с равными именами.
Ответ 3
Просто протестировал его на моем maven 3.3.9.
Прежде всего, свойства всегда определяются в профилях, если мы говорим о settings.xml.
Свойства из глобальных настроек. XML имеет наивысший приоритет и будет отменять как пользовательский settings.xml
, так и определенный pom.xml
, UNLESS, столкновение имен между профилями.
Если это так, то есть существует профиль с тем же id в глобальных, пользовательских настройках, а также pom.xml, user/local settings.xml - босс.
Даже если свойство в pom.xml
не находится внутри профиля, свойство user/local settings.xml
из активного профиля с тем же именем будет бить его.
Кстати, глобальный settings.xml
также будет бить свойство pom.xml без профиля.
В качестве примечания:
Для <repositories>
и <mirrors>
логика несколько отличается:
- Пользовательские/локальные настройки имеют более высокий приоритет, чем глобальный, для
<mirrors>
.
- Однако для
<repositories>
: pom - высший, затем - локальный, затем - глобальный.