Maven-Befehl, um zu bestimmen, welche settings.xml-Datei Maven verwendet

278

Wie verwende ich die Maven-Befehlszeile, um zu bestimmen, welche settings.xml-Datei Maven aufnimmt?

harschware
quelle

Antworten:

333

Starten Sie maven mit der Option -X (Debug) und überprüfen Sie den Beginn der Ausgabe. Es sollte so etwas geben:

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

(Ursprüngliche Verzeichnisnamen werden von mir entfernt)

elek
quelle
10
Vielleicht war dies nicht in der Debug-Ausgabe, bis Maven 3 veröffentlicht wurde, aber Ihr Beitrag etwa 2,5 Jahre später ist endlich die genaue Antwort, nach der ich gesucht habe (Entschuldigung für die 6-monatige Verzögerung, als ich es bemerkte).
Harschware
Die von mir verwendete Version von maven, maven2.x, zeigte dieses wichtige Detail nicht, als das Flag -B verwendet wurde. ... Leider, wenn Sie versuchen zu debuggen, was mit einem Jenkins-Server los ist.
Cognitiaclaeves
168

Ihr Kommentar zur (richtigen) Antwort von cletus impliziert, dass mehrere Maven-Einstellungsdateien beteiligt sind.

Maven verwendet immer entweder eine oder zwei Einstellungsdateien. Die in ($ {M2_HOME} /conf/settings.xml) definierten globalen Einstellungen sind immer erforderlich. Die Benutzereinstellungsdatei (definiert in $ {user.home} /. M2 / settings.xml) ist optional. Alle in den Benutzereinstellungen definierten Einstellungen haben Vorrang vor den entsprechenden globalen Einstellungen.

Sie können den Speicherort der globalen und Benutzereinstellungen über die Befehlszeile überschreiben. Im folgenden Beispiel werden die globalen Einstellungen auf c: \ global \ settings.xml und die Benutzereinstellungen auf c: \ user \ settings.xml festgelegt .

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

Derzeit gibt es keine Eigenschaft oder Mittel, um festzustellen, von welchen Benutzer- und globalen Einstellungsdateien mit Maven verwendet wurde. Um auf diese Werte zuzugreifen, müssten Sie MavenCli und / oder DefaultMavenSettingsBuilder ändern, um die Dateispeicherorte in das aufgelöste Settings-Objekt einzufügen.

Reicher Verkäufer
quelle
1
Es wäre großartig, wenn wir die Datei settings.xml mehrerer Benutzer bereitstellen könnten, damit wir sie beispielsweise für verschiedene Projekte verwenden könnten. Ich weiß, dass wir ein Profil verwenden könnten. Aber es wäre viel besser, wenn es eine separate Datei gäbe. Es ist nicht möglich, oder?! Prost!
Despot
Ich suchte nach einer Lösung, um meine Benutzereinstellungen nur einmal zu überschreiben, ohne die Datei manipulieren zu müssen. Also habe ich nur die globale Datei für die Benutzereinstellungen verwendet. Dh - Einstellungen c: \ global \ settings.xml auf diese Weise wurde die Benutzerdatei weggelassen
msp
@despot, spät zur Party, aber in gewisser Weise können Sie durch mehrere definierte Profile und einige benutzerdefinierte 'Trigger': maven.apache.org/settings.html#Activation
unteilbar
Im aktuellen Ordner wird immer nach POM gefragt. "Das von Ihnen angegebene Ziel erfordert die Ausführung eines Projekts, aber es befindet sich kein POM in diesem Verzeichnis (/). Bitte überprüfen Sie, ob Sie Maven aus dem richtigen Verzeichnis aufgerufen haben. -> [Hilfe 1]"
Nilesh
40

Dies ist die Konfigurationsdatei für Maven. Es kann auf zwei Ebenen angegeben werden:

  1. Benutzerlevel. Diese Datei settings.xml bietet die Konfiguration für einen einzelnen Benutzer und wird normalerweise in $ {user.home} /. M2 / settings.xml bereitgestellt.

              NOTE: This location can be overridden with the CLI option:
    
              -s /path/to/user/settings.xml
  2. Globale Ebene. Diese Datei settings.xml bietet Konfiguration für alle Maven-Benutzer auf einem Computer (vorausgesetzt, sie verwenden alle dieselbe Maven-Installation). Es wird normalerweise in $ {maven.home} /conf/settings.xml bereitgestellt.

              NOTE: This location can be overridden with the CLI option:
    
              -gs /path/to/global/settings.xml
firstthumb
quelle
1
Die Eigenschaft ist M2_HOME, nicht maven.home
Rich Seller
Es spielt keine Rolle. Wenn Sie die Umgebungsvariable mit maven.home festlegen, ist dies kein Problem
zuerst
24

Die M2_HOMEUmgebungsvariable für die globale. Siehe Einstellungsreferenz :

Das settingsElement in der settings.xmlDatei enthält Elemente, die zum Definieren von Werten verwendet werden, die die Maven-Ausführung auf verschiedene Arten konfigurieren, z. B. das pom.xml, aber nicht für ein bestimmtes Projekt gebündelt oder an eine Zielgruppe verteilt werden sollten. Dazu gehören Werte wie der lokale Repository-Speicherort, alternative Remote-Repository-Server und Authentifizierungsinformationen. Es gibt zwei Speicherorte für eine settings.xml-Datei:

  • Die Maven-Installation: $M2_HOME/conf/settings.xml
  • Installation eines Benutzers: ${user.home}/.m2/settings.xml
Cletus
quelle
Wenn diese Antwort implizieren soll, dass das Bestimmen des Repositorys nur durch Untersuchen der Umgebung erfolgt, ist dies eine gültige Antwort. Ich hatte gehofft, von einem Befehlszeilenschalter oder etwas zu erfahren, das eine endgültige Liste qualifizierter Pfade für alle verwendeten settings.xml-Dateien enthält ... Ich denke, es gibt wahrscheinlich keinen solchen Mechanismus.
Harschware
3
+1 Antwort, Cletus. Ich denke, es lohnt sich, die nächste Zeile aus Ihrem "Einstellungsreferenz" -Link zu erwähnen: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
Die Notwendigkeit einer maschinenspezifischen Konfiguration, um die privaten Repositorys zu finden, schmerzt mich sehr. Mir ist klar, dass dies der Status Quo im Java-Ökosystem ist, aber es führt zu schrecklich nicht reproduzierbaren Build-Setups.
Jpierson
24

Eine schnelle und schmutzige Methode, um festzustellen, ob Maven die gewünschte settings.xml verwendet, würde die XML ungültig machen und einen sicheren Maven-Befehl ausführen, für den settings.xml erforderlich ist.

Wenn es diese settings.xml liest, meldet Maven einen Fehler: "Fehler beim Lesen von settings.xml ..."

Spitzenkoch
quelle
3
Obwohl die Antwort von Cletus sehr informativ war, ist diese Antwort im engeren Sinne eher das, wonach ich gesucht habe (da in Maven selbst
anscheinend