Polecenie Maven, aby ustalić, którego pliku settings.xml używa Maven

278

Jak użyć wiersza polecenia maven, aby ustalić, który plik settings.xml ma pobierać Maven?

złośliwe oprogramowanie
źródło

Odpowiedzi:

333

Uruchom maven z opcją -X (debugowanie) i sprawdź początek danych wyjściowych. Powinno być coś takiego:

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

(Oryginalne nazwy katalogów są usuwane przeze mnie)

elek
źródło
10
Być może nie pojawiło się to w wynikach debugowania przed wydaniem maven 3, ale twój post około 2,5 roku później jest w końcu dokładną odpowiedzią, której szukałem (przepraszam za 6-miesięczne opóźnienie w zauważeniu tego).
harschware
Wersja maven, której używałem, maven2.x, nie pokazywała tego ważnego szczegółu, gdy użyto flagi -B. ... Niestety, jeśli próbujesz debugować, co się dzieje z serwerem Jenkins.
Cognitiaclaeves,
168

Twój komentarz do (poprawnej) odpowiedzi cletus sugeruje, że w grę wchodzi wiele plików ustawień Maven.

Maven zawsze używa jednego lub dwóch plików ustawień. Ustawienia globalne zdefiniowane w ($ {M2_HOME} /conf/settings.xml) są zawsze wymagane. Plik ustawień użytkownika (zdefiniowany w $ {user.home} /. M2 / settings.xml) jest opcjonalny. Wszelkie ustawienia zdefiniowane w ustawieniach użytkownika mają pierwszeństwo przed odpowiednimi ustawieniami globalnymi.

Możesz zastąpić lokalizację ustawień globalnych i ustawień użytkownika z wiersza polecenia, w poniższym przykładzie ustawisz ustawienia globalne na c: \ global \ settings.xml, a ustawienia użytkownika na c: \ user \ settings.xml :

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

Obecnie nie ma właściwości ani środków pozwalających ustalić, z jakich plików ustawień użytkownika i ustawień globalnych korzystano w Maven. Aby uzyskać dostęp do tych wartości, należy zmodyfikować MavenCli i / lub DefaultMavenSettingsBuilder, aby wstrzyknąć lokalizacje plików do rozstrzygniętego obiektu Ustawienia.

Bogaty sprzedawca
źródło
1
byłoby wspaniale, gdybyśmy mogli udostępnić plik settings.xml dla wielu użytkowników, dzięki czemu moglibyśmy używać ich na przykład w różnych projektach. Wiem, że moglibyśmy użyć profilu. Ale byłoby znacznie lepiej, gdyby istniał osobny plik. To nie jest możliwe, prawda ?! Twoje zdrowie!
despot
Szukałem rozwiązania, które zastąpiłoby moje ustawienia użytkownika tylko raz, bez konieczności manipulowania plikiem. Właśnie użyłem pliku globalnego do ustawień użytkownika. To znaczy - ustawienia c: \ global \ settings.xml w ten sposób pominięto plik użytkownika
msp
@despot, spóźniony na imprezę, ale w pewien sposób można to zrobić poprzez zdefiniowanie wielu profili i niektórych niestandardowych „wyzwalaczy”: maven.apache.org/settings.html#Activation
niepodzielny
Zawsze pyta o pom w bieżącym folderze. „Podany cel wymaga wykonania projektu, ale w tym katalogu (/) nie ma POM. Sprawdź, czy wywołałeś Maven z właściwego katalogu. -> [Pomoc 1]”
Nilesh
137

Możesz użyć wtyczki pomocy maven, aby poinformować Cię o zawartości pliku użytkownika i ustawień globalnych.

mvn help:effective-settings

poprosi maven o wypluwanie połączonych ustawień globalnych i ustawień użytkownika .

serg10
źródło
Pomaga mi zaktualizować stare repozytorium maven repo1.maven.org/maven2 do search.maven.org
Ricardo
40

To jest plik konfiguracyjny dla Maven. Można go określić na dwóch poziomach:

  1. Poziom użytkownika. Ten plik settings.xml zapewnia konfigurację dla jednego użytkownika i zwykle jest dostępny w $ {user.home} /. M2 / settings.xml.

              NOTE: This location can be overridden with the CLI option:
    
              -s /path/to/user/settings.xml
  2. Poziom globalny. Ten plik settings.xml zapewnia konfigurację dla wszystkich użytkowników Maven na komputerze (przy założeniu, że wszyscy korzystają z tej samej instalacji Maven). Zwykle jest dostarczany w $ {maven.home} /conf/settings.xml.

              NOTE: This location can be overridden with the CLI option:
    
              -gs /path/to/global/settings.xml
po pierwsze
źródło
1
właściwość to M2_HOME, a nie maven.home
Rich Seller
To nie ma znaczenia Jeśli ustawisz zmienną środowiskową za pomocą maven.home, nie będzie to problemem
raz pierwszy
24

M2_HOMEZmienna dla globalnej. Zobacz odniesienie do ustawień :

settingsElementem w settings.xmlpliku zawiera elementy stosowane do określenia wartości, które konfigurują Maven wykonanie na różne sposoby, takie jak pom.xml, ale nie powinno być dołączone do każdego projektu określonego, lub dystrybuowane do odbiorców. Należą do nich takie wartości, jak lokalizacja lokalnego repozytorium, alternatywne serwery zdalnego repozytorium i informacje uwierzytelniające. Istnieją dwa lokalizacje, w których może znajdować się plik settings.xml:

  • Instalacja Maven: $M2_HOME/conf/settings.xml
  • Instalacja użytkownika: ${user.home}/.m2/settings.xml
Cletus
źródło
Jeśli ta odpowiedź ma sugerować, że określanie repozytorium odbywa się tylko poprzez badanie środowiska, to jest to poprawna odpowiedź. Miałem nadzieję dowiedzieć się o przełączniku linii poleceń lub o czymś, co daje ostateczną listę kwalifikowanych ścieżek dla wszystkich używanych plików settings.xml ... Myślę, że prawdopodobnie nie ma takiego mechanizmu.
harschware,
3
+1 odpowiedź, Cletus. Myślę, że warto wspomnieć o następnym wierszu z linku „Ustawienia odniesienia”: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
Bardzo boli mnie potrzeba posiadania konfiguracji specyficznej dla maszyny, aby znaleźć prywatne repozytoria. Zdaję sobie sprawę, że jest to status quo w ekosystemie Java, ale prowadzi do strasznie nieodtwarzalnych konfiguracji kompilacji.
jpierson
24

Szybka i brudna metoda ustalenia, czy Maven używa pożądanych ustawień. Xml unieważniłby swój plik xml i uruchomiłaby komendę bezpiecznego maven wymagającą ustawienia.xml

Jeśli czyta to settings.xml, to Maven zgłasza błąd: „Błąd odczytu ustawień.xml ...”

topchef
źródło
3
Podczas gdy odpowiedź Cletusa była bardzo pouczająca, odpowiedź ta jest w ścisłym znaczeniu bardziej tego, czego szukałem (biorąc pod uwagę brak mechanizmu raportowania pliku settings.xml w samym Maven)
harschware