Specifica della posizione del repository locale di Maven come parametro CLI


131

È possibile impostare la posizione del repository Maven locale come argomento sulla riga comandi Maven?

Il fatto è che non uso quello predefinito in ~/.m2/repository. Tuttavia ho verificato alcuni progetti che vengono creati con le proprie impostazioni con -s settings.xml. Che settings.xml non specifica il mio repository locale, quindi Maven usa di ~/.m2/repositorynuovo gli usi ... Vorrei usare una posizione di repository locale non predefinita senza dover aggiungere un <localRepository>elemento in settings.xml del progetto

ho provato

  • -DlocalRepository="..."
  • $mvn invoker:run -s settings.xml clean install -DskipTests -DlocalRepositoryPath=
  • -Dsettings.localRepository

ma nessuna di queste opzioni funziona.

Quindi penso di dover decidere se modificherò un settings.xml di terze parti o sposterò il mio repository locale in ~


Ovviamente non è colpa tua, ma i progetti Maven non dovrebbero fornire un settings.xml. Vedi maven.apache.org/guides/mini/guide-configuring-maven.html
oberlies

Risposte:


258

usa la proprietà maven maven.repo.local:

mvn -Dmaven.repo.local=$HOME/.my/other/repository clean install

Non settings.xmlsono necessarie modifiche .


10
Il repository locale deve essere un percorso assoluto, maven.apache.org/guides/mini/guide-configuring-maven.html .
luka5z,

3
Su Windows usa `mvn -D" maven.repo.local "=% USER_HOME% /. My / other / repository clean
install`

Posso impostare una variabile d'ambiente per ottenere la stessa cosa?
powder366

@ powder366 no, AFAIK
Petr Kozelka il

Usando maven-3.6.3 la directory del repository locale funziona come un percorso relativo (almeno su MacOS)
Ed Randall

8

Per git:

alias mvn='mvn "-Dmaven.repo.local=$(git rev-parse --show-toplevel)/.m2/repository"'

Questo utilizza un repository maven separato in ciascun repository git


2

Un tipo di modo confuso che funzionerebbe è:

  1. Aggiungi <localRepository>${m2.localRepository}</localRepository>a settings.xml
  2. Nel tuo mvn.sh o mvn.bat, aggiungi -Dm2.localRepository=<full path to home dir>/.m2/repository prima di "$ @" nel comando che viene eseguito. Questo renderà il tuo repository locale predefinito rimanere dove dovrebbe essere.
  3. Adesso puoi usare mvn -Dm2.localRepository=... <phases/goals>. Poiché la proprietà del sistema della riga di comando viene aggiunta alla riga di comando dopo quella nello script mvn, avrà la precedenza. (Almeno sono abbastanza sicuro che funzioni in questo modo su Windows e Linux, ma i test lo diranno.)

Ciò non aiuta, ho aggiunto -Dm2.localRepository = "custom" prima di "$ @" nello script mvn, usa ancora ~ / .m2 / repository ... quindi ho anche incluso -Dm2.localRepository = "custom" durante l'esecuzione $ mvn, usa ancora ~ / .m2 / repository ... semplicemente senza l'elemento localRepository in settings.xml, non c'è modo di cambiarlo
lisak

@lisak: hai fatto il passaggio 1 per aggiungere l'elemento localRepository a settings.xml? Ho provato questo, e funziona, tranne per il fatto che non puoi effettivamente usare l'alias '~' nello script mvn. Devi inserire un percorso assoluto, anche se probabilmente potresti fare qualche altro trucco di script shell / batch per aggirare questo.
Ryan Stewart,

Funziona, ma in realtà non ho spiegazioni ... Se dichiaro localRepository in $ M2_HOME / conf / settings.xml senza passaggio 2, viene sostituito da -s settings.xml e non funziona, anche se con il passaggio 2 funziona ... ma solo il passaggio 2 senza localRepository in $ M2_HOME / conf / settings.xml non funziona ... entrambi i passaggi 1,2 devono essere applicati affinché funzioni e posso anche cambiare la posizione quindi tramite $ mvn -Dm2.localRepository = .. grazie Ryan
lisak il
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.