Comando Maven para determinar qué archivo settings.xml usa Maven

Respuestas:

333

Inicie maven con la opción -X (depuración) y examine el comienzo de la salida. Debería haber algo como esto:

...
[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
...

(Los nombres de directorio originales los elimino yo)

elek
fuente
10
Quizás esto no estaba en la salida de depuración hasta que se lanzó Maven 3, pero su publicación unos 2.5 años después es finalmente la respuesta exacta que estaba buscando (perdón por el retraso de 6 meses en notarlo).
harschware
La versión de maven que estaba usando, maven2.x, no mostraba este detalle importante cuando se usaba la bandera -B. ... Desafortunadamente, si está intentando depurar lo que está sucediendo con un servidor Jenkins.
Cognitiaclaeves
168

Su comentario a la respuesta (correcta) de cletus implica que hay varios archivos de configuración de Maven involucrados.

Maven siempre usa uno o dos archivos de configuración. Siempre se requiere la configuración global definida en ($ {M2_HOME} /conf/settings.xml). El archivo de configuración del usuario (definido en $ {user.home} /. M2 / settings.xml) es opcional. Cualquier configuración definida en la configuración del usuario tiene prioridad sobre la configuración global correspondiente.

Puede anular la ubicación de la configuración global y del usuario desde la línea de comandos, el siguiente ejemplo establecerá la configuración global en c: \ global \ settings.xml y la configuración del usuario en c: \ user \ settings.xml :

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

Actualmente no existe ninguna propiedad o medio para establecer desde qué usuario se utilizaron los archivos de configuración global con Maven. Para acceder a estos valores, deberá modificar MavenCli y / o DefaultMavenSettingsBuilder para inyectar las ubicaciones de los archivos en el objeto de configuración resuelto.

Vendedor rico
fuente
1
sería genial si pudiéramos proporcionar la configuración de múltiples usuarios.xml, por lo que podríamos usarlos con diferentes proyectos, por ejemplo. Sé que podríamos usar un perfil. Pero sería mucho mejor si hubiera un archivo separado. No es posible, ¿verdad? ¡Salud!
déspota
Estaba buscando una solución para anular mi configuración de usuario solo una vez sin tener que manipular el archivo. Así que acabo de usar el archivo global para la configuración del usuario. Es decir, configuración c: \ global \ settings.xml de esta manera se omitió el archivo del usuario
msp
@despot, tarde a la fiesta pero de una manera que puede a través de múltiples perfiles definidos y algunos 'disparadores' personalizados: maven.apache.org/settings.html#Activation
indivisible el
Siempre pide pom en la carpeta actual. "El objetivo que especificó requiere un proyecto para ejecutar, pero no hay POM en este directorio (/). Verifique que invocó a Maven desde el directorio correcto. -> [Ayuda 1]"
Nilesh
40

Este es el archivo de configuración para Maven. Se puede especificar en dos niveles:

  1. Nivel de usuario. Este archivo settings.xml proporciona la configuración para un solo usuario, y normalmente se proporciona en $ {user.home} /. M2 / settings.xml.

              NOTE: This location can be overridden with the CLI option:
    
              -s /path/to/user/settings.xml
  2. Nivel global. Este archivo settings.xml proporciona configuración para todos los usuarios de Maven en una máquina (suponiendo que todos estén usando la misma instalación de Maven). Normalmente se proporciona en $ {maven.home} /conf/settings.xml.

              NOTE: This location can be overridden with the CLI option:
    
              -gs /path/to/global/settings.xml
primer empuje
fuente
1
la propiedad es M2_HOME, no maven.home
Vendedor rico
No importa. Si configura la variable de entorno usando maven.home, no será un problema
primerothumb
24

La M2_HOMEvariable de entorno para la global. Ver Configuración de referencia :

El settingselemento en el settings.xmlarchivo contiene elementos utilizados para definir valores que configuran la ejecución de Maven de varias maneras, como el pom.xml, pero no deben agruparse en ningún proyecto específico ni distribuirse a una audiencia. Estos incluyen valores como la ubicación del repositorio local, servidores de repositorio remotos alternativos e información de autenticación. Hay dos ubicaciones donde puede vivir un archivo settings.xml:

  • La instalación de Maven: $M2_HOME/conf/settings.xml
  • La instalación de un usuario: ${user.home}/.m2/settings.xml
cletus
fuente
Si esta respuesta implica que la determinación del repositorio se realiza solo examinando el entorno, entonces esta es una respuesta válida. Esperaba conocer un cambio de línea de comando o algo que proporcione una lista definitiva de rutas calificadas para todos los archivos settings.xml utilizados ... Creo que probablemente no exista tal mecanismo.
harschware
3
+1 respuesta, Cletus. Creo que vale la pena mencionar la siguiente línea de su enlace "Referencia de configuración":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.
Kevin Meredith
La necesidad de tener una configuración específica de la máquina para encontrar los repositorios privados me duele mucho. Me doy cuenta de que este es el status quo en el ecosistema de Java, pero conduce a configuraciones de compilación terriblemente irreproducibles.
jpierson
24

El método rápido y sucio para determinar si Maven está utilizando settings.xml deseado invalidaría su xml y ejecutaría algún comando seguro de maven que requiera settings.xml.

Si lee este settings.xml, Maven informa un error: "Error al leer settings.xml ..."

el mejor chef
fuente
3
Si bien la respuesta de Cletus fue muy informativa, esta respuesta es en el sentido más estricto más de lo que estaba buscando (dado que parece haber una falta de mecanismo de informe de archivos settings.xml en el propio Maven)
harschware