Commande Maven pour déterminer le fichier settings.xml que Maven utilise


Réponses:


333

Démarrez maven avec l'option -X (débogage) et examinez le début de la sortie. Il devrait y avoir quelque chose comme ça:

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

(Les noms de répertoire d'origine sont supprimés par moi)


10
Peut-être que ce n'était pas dans la sortie de débogage jusqu'à la sortie de maven 3, mais votre message quelque 2,5 ans plus tard est finalement la réponse exacte que je cherchais (désolé pour le retard de 6 mois à le remarquer).
harschware

La version de maven que j'utilisais, maven2.x, ne montrait pas ce détail important lorsque l'indicateur -B était utilisé. ... Malheureusement, si vous essayez de déboguer ce qui se passe avec un serveur Jenkins.
Cognitiaclaeves

168

Votre commentaire à la réponse (correcte) de cletus implique que plusieurs fichiers de paramètres Maven sont impliqués.

Maven utilise toujours un ou deux fichiers de paramètres. Les paramètres globaux définis dans ($ {M2_HOME} /conf/settings.xml) sont toujours requis. Le fichier de paramètres utilisateur (défini dans $ {user.home} /. M2 / settings.xml) est facultatif. Tous les paramètres définis dans les paramètres utilisateur ont priorité sur les paramètres globaux correspondants.

Vous pouvez remplacer l'emplacement des paramètres globaux et utilisateur à partir de la ligne de commande, l'exemple suivant définira les paramètres globaux sur c: \ global \ settings.xml et les paramètres utilisateur sur c: \ user \ settings.xml :

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

Il n'existe actuellement aucune propriété ni aucun moyen d'établir à partir de quels fichiers utilisateur et paramètres globaux ont été utilisés avec Maven. Pour accéder à ces valeurs, vous devez modifier MavenCli et / ou DefaultMavenSettingsBuilder pour injecter les emplacements de fichier dans l'objet Settings résolu.


1
ce serait formidable si nous pouvions fournir settings.xml à plusieurs utilisateurs, nous pourrions donc les utiliser avec différents projets par exemple. Je sais que nous pourrions utiliser un profil. Mais ce serait bien mieux s'il y avait un fichier séparé. Ce n'est pas possible, non?! À votre santé!
despote

Je cherchais une solution pour remplacer mes paramètres utilisateur une seule fois sans avoir à altérer le fichier. J'ai donc utilisé le fichier global pour les paramètres utilisateur. C'est-à-dire les paramètres c: \ global \ settings.xml de cette façon, le fichier utilisateur a été omis
msp

@despot, en retard à la fête mais d'une manière que vous pouvez à travers plusieurs profils définis et certains «déclencheurs» personnalisés: maven.apache.org/settings.html#Activation
indivisible

Il demande toujours pom dans le dossier courant. "L'objectif que vous avez spécifié nécessite l'exécution d'un projet mais il n'y a pas de POM dans ce répertoire (/). Veuillez vérifier que vous avez appelé Maven à partir du bon répertoire. -> [Aide 1]"
Nilesh


40

Il s'agit du fichier de configuration de Maven. Il peut être spécifié à deux niveaux:

  1. Niveau de l'utilisateur. Ce fichier settings.xml fournit la configuration pour un seul utilisateur et est normalement fourni dans $ {user.home} /. M2 / settings.xml.

              NOTE: This location can be overridden with the CLI option:
    
              -s /path/to/user/settings.xml
  2. Niveau global. Ce fichier settings.xml fournit la configuration pour tous les utilisateurs Maven sur une machine (en supposant qu'ils utilisent tous la même installation Maven). Il est normalement fourni dans $ {maven.home} /conf/settings.xml.

              NOTE: This location can be overridden with the CLI option:
    
              -gs /path/to/global/settings.xml

1
la propriété est M2_HOME, pas maven.home
Rich Seller

Ça n'a pas d'importance. Si vous définissez la variable d'environnement à l'aide de maven.home, ce ne sera pas un problème
firstthumb

24

La M2_HOMEvariable d'environnement pour la variable globale. Voir Référence des paramètres :

L' settingsélément du settings.xmlfichier contient des éléments utilisés pour définir des valeurs qui configurent l'exécution de Maven de diverses manières, comme le pom.xml, mais ne doivent pas être regroupés dans un projet spécifique, ni distribués à un public. Il s'agit notamment de valeurs telles que l'emplacement du référentiel local, les serveurs de référentiel distants alternatifs et les informations d'authentification. Il existe deux emplacements où un fichier settings.xml peut vivre:

  • L'installation Maven: $M2_HOME/conf/settings.xml
  • Installation d'un utilisateur: ${user.home}/.m2/settings.xml

Si cette réponse implique que la détermination du référentiel se fait uniquement en examinant l'environnement, alors c'est une réponse valide. J'espérais apprendre un commutateur de ligne de commande ou quelque chose qui donne une liste définitive de chemins d'accès qualifiés pour tous les fichiers settings.xml utilisés ... Je pense qu'il n'y a probablement pas un tel mécanisme.
harschware

3
+1 réponse, Cletus. Je pense qu'il vaut la peine de mentionner la ligne suivante de votre lien "Paramètres de référence":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 nécessité d'avoir une configuration spécifique à la machine pour trouver les référentiels privés me fait tellement mal. Je me rends compte que c'est le statu quo dans l'écosystème Java, mais cela conduit à des configurations de construction terriblement improductibles.
jpierson

24

Une méthode rapide et sale pour déterminer si Maven utilise le fichier settings.xml souhaité invaliderait son xml et exécuterait une commande maven sûre qui nécessite settings.xml.

S'il lit ce fichier settings.xml, Maven signale une erreur: "Erreur de lecture de settings.xml ..."


3
Alors que la réponse de Cletus était très informative, cette réponse est au sens strict ce que je cherchais (étant donné qu'il semble y avoir un manque de mécanisme de rapport de fichier settings.xml dans Maven lui-même)
harschware
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.