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

278

Comment utiliser la ligne de commande maven pour déterminer le fichier settings.xml que Maven récupère?

harschware
la source

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)

elek
la source
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.

Vendeur riche
la source
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
137

Vous pouvez utiliser le plugin d'aide maven pour vous indiquer le contenu de vos fichiers utilisateur et paramètres globaux.

mvn help:effective-settings

demandera à Maven de recracher le paramètres globaux et utilisateur combinés .

serg10
la source
Cela m'aide à mettre à jour l'ancien repo maven repo1.maven.org/maven2 vers search.maven.org
Ricardo
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
firstthumb
la source
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
cletus
la source
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 ..."

excellent chef
la source
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