2012-04-30 11 views
16

Dzisiaj zauważyłem, że maven własności zdefiniowane w settings.xml nadpisać ten w pom.xml.Jaka jest kolejność nadpisywania właściwości Maven w pom.xml i settings.xml?

Ponieważ jest to tylko obserwacja, nie jestem pewien, czy jest to całkowicie poprawne. Tak więc szukam odniesienia lub jakiegoś artykułu, ale nie znajduję żadnego konkretnego oświadczenia na temat zachowania nadpisujących właściwości o tej samej nazwie w settings.xml i pom.xml.

Może ktoś może podać link do części referencyjnej (którą mogę przeoczyć) lub wiarygodnego artykułu/bloga?

+0

Czy masz profil o tym samym identyfikatorze lub o innym identyfikatorze? – khmarbaise

+0

Właściwości w POM są bez żadnego profilu; Poprawki w pliku settings.xml znajdują się w profilu o identyfikatorze, którego nie używa się w żadnym innym miejscu. – Ralph

+0

Ale jeśli twoje właściwości mają taką samą nazwę, zarówno w pom, jak iw pliku settings.xml, więc zostaną nadpisane przez wartości, które pochodzą z pliku settings.xml. W przeciwnym razie nie byłoby możliwe zastąpienie właściwości przez profil. – khmarbaise

Odpowiedz

16

podstawie documentation moim zdaniem jest jasne, który z nich ma pierwszeństwo przed innymi (wyciąg z docs):

Jeśli profil jest aktywny od ustawień, jej wartości będzie zastąpić dowolny równoważnie identyfikator 'd profile w pliku POM lub profiles.xml.

Plik profiles.xml już nie istnieje w Maven 3 tylko w Maven 2.2.1 jest obsługiwany, ale nie powinien być używany.

7

myślę nieruchomości o jednakowych nazwach są zastępowane w następnej kolejności (od najwyższej do najniższej kontekstu):

  • Globalny
  • profilu deskryptor
  • Per projektu
  • każdego użytkownika

http://maven.apache.org/guides/introduction/introduction-to-profiles.html

W związku z tym właściwości (dla każdego projektu) są nadpisywane przez właściwości settings.xml (na użytkownika) o równych nazwach.

+0

Jakieś pojęcie, co "-D" się liczy? – Christian

1

Właśnie przetestowałem to na moim mającym 3.3.9.

Przede wszystkim właściwości są zawsze definiowane w profilach, jeśli mówimy o settings.xml. Właściwości z ustawień globalnych XML ma najwyższy priorytet i zastąpi zarówno użytkownika settings.xml, jak i określonego użytkownika kolizji między profilami.

Jeśli tak, to jest to profil o tym samym id w globalnych ustawieniach użytkownika, a także pom.xml, użytkownik/lokalny settings.xml jest szefem. Nawet jeśli właściwość w pom.xml nie znajduje się wewnątrz profilu, właściwość użytkownik/lokalna settings.xml z aktywnego profilu o tej samej nazwie zostanie pobita. Nawiasem mówiąc, globalna settings.xml będzie również pobijać właściwość pom.xml bez profilu.

Na marginesie: Dla <repositories> i <mirrors> logika jest nieco inna:

  • użytkownika/Ustawienia lokalne mają wyższy priorytet niż globalna dla <mirrors>.
  • Jednak dla <repositories>: pom - najwyższy, następnie - lokalny, a następnie - globalny.
Powiązane problemy