Określanie lokalizacji lokalnego repozytorium Mavena jako parametru interfejsu wiersza polecenia

133

Czy można ustawić lokalizację lokalnego repozytorium Maven jako argument w wierszu poleceń Maven?

Chodzi o to, że nie używam domyślnego w ~/.m2/repository. Jednak sprawdziłem projekt, który jest budowany z własnymi ustawieniami z -s settings.xml. To settings.xml nie określa mojego lokalnego repozytorium, więc Maven używa ~/.m2/repositoryponownie ... Chciałbym użyć innej niż domyślna lokalizacji lokalnego repozytorium bez konieczności dodawania <localRepository>elementu w ustawieniach projektu.xml

próbowałem

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

ale żadna z tych opcji nie działa.

Myślę więc, że muszę zdecydować, czy zmodyfikuję plik settings.xml innej firmy, czy przeniosę lokalne repozytorium do ~

lisak
źródło
Oczywiście to nie twoja wina, ale projekty Maven nie powinny zapewniać settings.xml. Zobacz maven.apache.org/guides/mini/guide-configuring-maven.html
oberlies

Odpowiedzi:

262

użyj własności maven maven.repo.local :

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

Żadne modyfikacje nie settings.xmlsą konieczne.

Petr Kozelka
źródło
10
Lokalne repozytorium musi być ścieżką bezwzględną, maven.apache.org/guides/mini/guide-configuring-maven.html .
luka5z
4
W systemie Windows użyj `mvn -D" maven.repo.local "=% USER_HOME% /. My / other / repository clean
install`
Czy mogę ustawić zmienną środowiskową, aby osiągnąć to samo?
proszek 366
@ powder366 no, AFAIK
Petr Kozelka
Używając maven-3.6.3, katalog lokalnego repozytorium działa jako ścieżka względna (przynajmniej na MacOS)
Ed Randall
8

Dla git:

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

Używa to osobnego repozytorium maven w każdym repozytorium git

Andrew Sherman
źródło
2

Jednym ze sposobów, które by zadziałały, jest:

  1. Dodaj <localRepository>${m2.localRepository}</localRepository>do pliku settings.xml
  2. W swoim mvn.sh lub mvn.bat dodaj -Dm2.localRepository=<full path to home dir>/.m2/repository przed „$ @” w poleceniu, które zostanie wykonane. Spowoduje to, że domyślne repozytorium lokalne pozostanie tam, gdzie powinno.
  3. Teraz możesz użyć mvn -Dm2.localRepository=... <phases/goals>. Ponieważ właściwość systemu wiersza poleceń zostanie dodana do wiersza poleceń po tej w skrypcie mvn, będzie miała pierwszeństwo. (Przynajmniej jestem prawie pewien, że działa w ten sposób zarówno w systemie Windows, jak i Linux, ale testy pokażą).
Ryan Stewart
źródło
To nie pomaga, dodałem -Dm2.localRepository = "custom" przed "$ @" do skryptu mvn, nadal używa ~ / .m2 / repository ... potem dołączyłem również -Dm2.localRepository = "custom" podczas uruchamiania $ mvn, nadal używa ~ / .m2 / repository ... po prostu bez elementu localRepository w pliku settings.xml, nie ma możliwości jego zmiany
lisak
@lisak: Czy wykonałeś krok 1 dodawania elementu localRepository do settings.xml? Przetestowałem to i działa, z wyjątkiem tego, że w rzeczywistości nie możesz użyć aliasu „~” w skrypcie mvn. Musisz wprowadzić bezwzględną ścieżkę, chociaż prawdopodobnie możesz zrobić inną sztuczkę skryptów powłoki / wsadowych, aby to obejść.
Ryan Stewart
Działa, ale naprawdę nie mam wyjaśnienia ... Jeśli zadeklaruję localRepository w $ M2_HOME / conf / settings.xml bez kroku 2, jest on zastępowany przez -s settings.xml i nie działa, chociaż z krokiem 2 działa ... ale tylko krok 2 bez localRepository w $ M2_HOME / conf / settings.xml nie działa ... oba kroki 1,2 muszą być zastosowane, aby działało, a mogę nawet zmienić lokalizację, a następnie przez $ mvn -Dm2.localRepository = .. dzięki Ryan
lisak