Angeben des lokalen Repository-Speicherorts von Maven als CLI-Parameter

131

Ist es möglich, den Speicherort des lokalen Maven-Repositorys als Argument in der Maven-Befehlszeile festzulegen?

Die Sache ist, dass ich nicht die Standardeinstellung in verwende ~/.m2/repository. Allerdings habe ich mir ein Projekt angesehen, das mit eigenen Einstellungen erstellt wird -s settings.xml. Diese settings.xml gibt mein lokales Repository nicht an, daher verwendet Maven ~/.m2/repositoryerneut verwendet ... Ich möchte einen nicht standardmäßigen lokalen Repository-Speicherort verwenden, ohne ein <localRepository>Element in die settings.xml des Projekts einfügen zu müssen

ich habe es versucht

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

Aber keine dieser Optionen funktioniert.

Ich denke, ich muss mich entscheiden, ob ich die settings.xml eines Drittanbieters ändern oder mein lokales Repo nach verschieben möchte ~

lisak
quelle
Natürlich ist dies nicht Ihre Schuld, aber Maven-Projekte sollten keine bereitstellen settings.xml. Siehe maven.apache.org/guides/mini/guide-configuring-maven.html
oberlies

Antworten:

257

Verwenden Sie die Maven-Eigenschaft maven.repo.local:

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

Es settings.xmlsind keine Änderungen erforderlich.

Petr Kozelka
quelle
10
Das lokale Repository muss ein absoluter Pfad sein, maven.apache.org/guides/mini/guide-configuring-maven.html .
luka5z
3
Verwenden Sie unter Windows `mvn -D" maven.repo.local "=% USER_HOME% /. My / other / repository clean
install`
Kann ich eine Umgebungsvariable festlegen, um dasselbe zu erreichen?
Pulver366
@ Pulver366 nein, AFAIK
Petr Kozelka
Mit maven-3.6.3 fungiert das lokale Repository-Verzeichnis als relativer Pfad (zumindest unter MacOS)
Ed Randall
8

Für Git:

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

Dies verwendet ein separates Maven-Repository in jedem Git-Repository

Andrew Sherman
quelle
2

Eine Art von Hacky-Methode, die funktionieren würde, ist:

  1. Fügen Sie <localRepository>${m2.localRepository}</localRepository>Ihrer settings.xml hinzu
  2. Fügen Sie in Ihrer Datei mvn.sh oder mvn.bat -Dm2.localRepository=<full path to home dir>/.m2/repository vor dem "$ @" den Befehl ein, der ausgeführt wird. Dadurch bleibt Ihr lokales Standard-Repo dort, wo es sein sollte.
  3. Jetzt können Sie verwenden mvn -Dm2.localRepository=... <phases/goals>. Da Ihre Befehlszeilensystemeigenschaft nach der im mvn-Skript zur Befehlszeile hinzugefügt wird, hat sie Vorrang. (Zumindest bin ich mir ziemlich sicher, dass es sowohl unter Windows als auch unter Linux so funktioniert, aber das Testen wird es zeigen.)
Ryan Stewart
quelle
Das hilft nicht, ich habe -Dm2.localRepository = "custom" vor "$ @" in das MVN-Skript eingefügt, verwende immer noch ~ / .m2 / repository ... dann habe ich beim Ausführen auch -Dm2.localRepository = "custom" hinzugefügt $ mvn, verwendet immer noch ~ / .m2 / repository ... einfach ohne localRepository-Element in der settings.xml gibt es keine Möglichkeit, es zu ändern
lisak
@lisak: Haben Sie Schritt 1 ausgeführt, um das Element localRepository zur Datei settings.xml hinzuzufügen? Ich habe dies getestet und es funktioniert, außer dass Sie den Alias ​​'~' im MVN-Skript nicht verwenden können. Sie müssen einen absoluten Pfad eingeben, obwohl Sie wahrscheinlich andere Shell- / Batch-Skript-Tricks ausführen könnten, um dies zu umgehen.
Ryan Stewart
Es funktioniert, aber ich habe wirklich keine Erklärung ... Wenn ich localRepository in $ M2_HOME / conf / settings.xml ohne Schritt 2 deklariere, wird es von -s settings.xml überschrieben und funktioniert nicht, obwohl mit Schritt 2 es funktioniert ... aber nur Schritt 2 ohne localRepository in $ M2_HOME / conf / settings.xml funktioniert nicht ... beide Schritte 1,2 müssen angewendet werden, damit es funktioniert, und ich kann den Speicherort dann sogar über $ mvn ändern -Dm2.localRepository = .. danke Ryan
lisak