Каков порядок перезаписывания свойств Maven в pom.xml и settings.xml? - программирование
Подтвердить что ты не робот

Каков порядок перезаписывания свойств Maven в pom.xml и settings.xml?

сегодня я заметил, что свойства maven, определенные в settings.xml, переписывают одно в pom.xml.

Потому что это всего лишь наблюдение, я не уверен, что это абсолютно правильно. Поэтому я ищу ссылку или какую-то статью, но я не нахожу конкретного утверждения о поведении свойств перезаписи, заданных с тем же именем, в settings.xml и pom.xml.

Возможно, кто-то может предоставить ссылку на ссылочную часть (которую я могу упустить) или надёжную статью/блог?

4b9b3361

Ответ 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 - высший, затем - локальный, затем - глобальный.