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


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)


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.


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


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

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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.