2012-04-30 25 views
16

hoy observé que las propiedades de maven definidas en settings.xml sobrescriben la de pom.xml.¿Cuál es el orden de sobrescribir las propiedades de Maven en pom.xml y settings.xml?

Porque es solo una observación, no estoy seguro si esto es totalmente correcto. Por lo tanto, busqué la referencia o algún artículo, pero no encuentro una declaración concreta sobre el comportamiento de las propiedades de sobreescritura definidas con el mismo nombre en settings.xml y pom.xml.

Tal vez alguien puede proporcionar un enlace a la parte de referencia (que puedo pasar por alto) o un artículo/blog confiable?

+0

¿Tiene un perfil con la misma identificación o con diferentes id? – khmarbaise

+0

Las propiedades en el POM están sin ningún perfil; las propiedades de settings.xml se encuentran en un perfil con una identificación que no se utiliza en ningún otro lado. – Ralph

+0

Pero si sus propiedades tienen el mismo nombre tanto en pom como en settings.xml, entonces se sobrescribirán con los valores que provienen del archivo settings.xml. De lo contrario, no sería posible sobrescribir las propiedades por un perfil. – khmarbaise

Respuesta

16

Sobre la base de la documentation en mi opinión, está claro cuál tiene precedencia sobre el otro (extracto de los documentos):

Si un perfil está activo desde la configuración, sus valores se anulan cualquier equivalentemente ID 'd perfiles en un archivo POM o profiles.xml.

profiles.xml ya no existe en Maven 3, solo en Maven 2.2.1 es compatible, pero no debe utilizarse.

7

creo propiedades con nombres iguales se redefinen en secuencia siguiente (de mayor a contexto más bajo):

  • Global
  • Perfil descriptor
  • por el proyecto del
  • Por usuario

http://maven.apache.org/guides/introduction/introduction-to-profiles.html

Por lo tanto, las propiedades pom.xml (por proyecto) son reemplazadas por settings.xml (por usuario) propiedades con los mismos nombres.

+0

¿Alguna idea de lo que '-D' cuenta? – Christian

1

Acabo de probarlo en mi maven 3.3.9.

En primer lugar, las propiedades siempre se definen en los perfiles, si estamos hablando de settings.xml. Las propiedades de la configuración global XML tienen la prioridad más alta y anularán tanto al usuario settings.xml como a un pom.xml específico, A MENOS QUE exista una colisión de nombre entre los perfiles.

Si es el caso, es que hay un perfil con el mismo ID en global, configuración de usuario, así como pom.xml, configuración de usuario/local.xml es el jefe. Incluso si una propiedad en pom.xml no se encuentra dentro de un perfil, la propiedad de usuario/local settings.xml de un perfil activo con el mismo nombre la superará. Por cierto, global settings.xml también superará la propiedad pom.xml sin un perfil.

Como nota al margen: Para <repositories> y <mirrors> la lógica es ligeramente diferente:/ajustes locales

  • usuario tienen mayor prioridad que global para <mirrors>.
  • Sin embargo, para <repositories>: pom - highest, then - local, then - global.
Cuestiones relacionadas