Comando Maven per determinare quale file settings.xml utilizza Maven


Risposte:


333

Avvia maven con l'opzione -X (debug) ed esamina l'inizio dell'output. Dovrebbe esserci qualcosa del genere:

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

(I nomi di directory originali sono stati rimossi da me)


10
Forse questo non era nell'output di debug fino a quando non è stato rilasciato Maven 3, ma il tuo post circa 2,5 anni dopo è finalmente la risposta esatta che stavo cercando (scusami per il ritardo di 6 mesi nel notarlo).
harschware,

La versione di Maven che stavo usando, maven2.x, non mostrava questo dettaglio importante quando veniva usato il flag -B. ... Peccato, se stai cercando di eseguire il debug di ciò che sta succedendo con un server Jenkins.
Cognitiaclaeves,

168

Il tuo commento alla risposta (corretta) di cletus implica che sono coinvolti più file di impostazioni Maven.

Maven utilizza sempre uno o due file di impostazioni. Le impostazioni globali definite in ($ {M2_HOME} /conf/settings.xml) sono sempre richieste. Il file delle impostazioni utente (definito in $ {user.home} /. M2 / settings.xml) è facoltativo. Qualsiasi impostazione definita nelle impostazioni utente ha la precedenza sulle corrispondenti impostazioni globali.

È possibile sovrascrivere la posizione delle impostazioni globali e dell'utente dalla riga di comando, l'esempio seguente imposta le impostazioni globali su c: \ global \ settings.xml e le impostazioni dell'utente su c: \ user \ settings.xml :

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

Attualmente non esiste alcuna proprietà o mezzo per stabilire da quale utente e file di impostazioni globali sono stati utilizzati con Maven. Per accedere a questi valori, è necessario modificare MavenCli e / o DefaultMavenSettingsBuilder per iniettare i percorsi dei file nell'oggetto Impostazioni risolto.


1
sarebbe fantastico se potessimo fornire settings.xml di più utenti, quindi potremmo usarli con diversi progetti, ad esempio. So che potremmo usare un profilo. Ma sarebbe molto meglio se ci fosse un file separato. Non è possibile, vero ?! Saluti!
despota il

Stavo cercando una soluzione per sovrascrivere le mie impostazioni utente solo una volta senza dover manomettere il file. Quindi ho appena usato il file globale per le impostazioni dell'utente. Vale a dire - settaggi c: \ global \ settings.xml in questo modo il file utente è stato omesso
msp

@despot, in ritardo alla festa, ma in un certo senso è possibile definire più profili e alcuni "trigger" personalizzati: maven.apache.org/settings.html#Activation
indivisible

Chiede sempre pom nella cartella corrente. "L'obiettivo da te specificato richiede l'esecuzione di un progetto ma non c'è POM in questa directory (/). Verifica di aver invocato Maven dalla directory corretta. -> [Help 1]"
Nilesh


40

Questo è il file di configurazione per Maven. Può essere specificato a due livelli:

  1. Livello utente. Questo file settings.xml fornisce la configurazione per un singolo utente ed è normalmente fornito in $ {user.home} /. M2 / settings.xml.

              NOTE: This location can be overridden with the CLI option:
    
              -s /path/to/user/settings.xml
  2. Livello globale. Questo file settings.xml fornisce la configurazione per tutti gli utenti Maven su una macchina (supponendo che tutti stiano usando la stessa installazione di Maven). Normalmente viene fornito in $ {maven.home} /conf/settings.xml.

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

1
la proprietà è M2_HOME, non maven.home
Rich Seller

Non importa Se imposti la variabile d'ambiente usando maven.home, non sarà un problema
firstthumb

24

La M2_HOMEvariabile d'ambiente per quella globale. Vedi riferimento alle impostazioni :

L' settingselemento nel settings.xmlfile contiene elementi utilizzati per definire i valori che configurano l'esecuzione di Maven in vari modi, come il pom.xml, ma non devono essere raggruppati in alcun progetto specifico o distribuiti a un pubblico. Questi includono valori come l'ubicazione del repository locale, i server di repository remoti alternativi e le informazioni di autenticazione. Esistono due posizioni in cui può vivere un file settings.xml:

  • L'installazione di Maven: $M2_HOME/conf/settings.xml
  • Installazione di un utente: ${user.home}/.m2/settings.xml

Se questa risposta implica che la determinazione del repository viene eseguita solo esaminando l'ambiente, questa è una risposta valida. Speravo di conoscere un interruttore della riga di comando o qualcosa che fornisca un elenco definitivo di percorsi qualificati per tutti i file settings.xml utilizzati ... Penso che probabilmente non esiste un tale meccanismo.
harschware,

3
+1 risposta, Cletus. Penso che valga la pena menzionare la riga successiva dal link "Impostazioni di riferimento":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 necessità di avere una configurazione specifica per la macchina per trovare i repository privati ​​mi fa molto male. Mi rendo conto che questo è lo status quo nell'ecosistema Java, ma porta a configurazioni di build terribilmente irriproducibili.
jpierson,

24

Il metodo rapido e sporco per determinare se Maven sta usando settings.xml desiderato invaliderebbe il suo xml ed eseguire alcuni comandi sicuri maven che richiedono settings.xml.

Se legge questo settings.xml, Maven segnala un errore: "Errore durante la lettura di settings.xml ..."


3
Mentre la risposta di Cletus è stata molto istruttiva, questa risposta è nel senso più rigoroso di quello che stavo cercando (dato che sembra mancare qualsiasi meccanismo di segnalazione dei file settings.xml nello stesso Maven)
harschware,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.