2011-06-30 5 views
37

Używam filtrowania zasobów do zastąpienia niektórych $ {wartości} w pliku właściwości.Jak mogę użyć wartości domyślnej, jeśli zmienna środowiskowa nie jest ustawiona dla filtrowania zasobów w programie maven?

np. plik zawiera: PROPERTY = $ {VALUE}

Chcę, aby $ {VALUE} zostało zastąpione zmienną środowiskową $ VALUE, która działa dobrze, jeśli ustawiono wartość $ VALUE podczas kompilacji. Niesamowite.

Jednak te env vars są ustawiane tylko w naszym oficjalnym środowisku kompilacji (przez Jenkinsa), a nie w kompilacjach programistów, więc $ {wartości} pozostają w pliku właściwości po filtrowaniu, co może zepsuć rzeczy. Wolałbym nie wymagać env vars w środowiskach programistycznych, ponieważ zawsze prowadzi to do kruchych buildów dev i whiny.

Jak mogę użyć wartości zmiennej środowiskowej, jeśli jest ona ustawiona i użyć innej domyślnej wartości właściwości, jeśli zmienna env nie jest ustawiona?

Z moich testów domyślnie działa na odwrót, ponieważ właściwości ustawione w pom będą nadpisywać zmienne środowiskowe w celu filtrowania zasobów.

Dzięki

+0

widać moją odpowiedź tutaj podobnym pytaniem [Jak określić i ustawić brakujące właściwości środowiska w Maven?] [1] [1]: http://stackoverflow.com/a/24456751/1877108 – Arnab

+0

Możliwy duplikat [Ustawianie domyślnych wartości dla niestandardowych właściwości Maven 2] (http://stackoverflow.com/questions/899274/setting-default-values -do-custom-maven-2-properties) –

Odpowiedz

40

używam dla określenia profilu jako

<profiles> 
    <profile> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
     <property> 
     <name>!myproperty</name> 
     </property> 
    </activation> 
    ... 
    <properties> 
     <myproperty>some value</myproperty> 
    </properties> 
    </profile> 
    ... 
</profiles> 

Uwaga

  1. activeByDefault jest ustawiona na wartość true w celu umożliwienia mu domyślnie.
  2. Wartość !myproperty oznacza, że ​​ta właściwość nie istnieje lub jej nie ma.
  3. Jeśli nie istnieje myproperty, użyj zamiast tego myproperty zdefiniowanego w .

Można zobaczyć dalsze informacje na http://maven.apache.org/guides/introduction/introduction-to-profiles.html

Mam nadzieję, że to może pomóc osiągnąć swoje wymagania.

Pozdrawiam,

Charlee Ch.

+7

Wielkie dzięki za komentarz. Usunąłem true, aby był on aktywowany wyłącznie na podstawie wartości właściwości i zmieniłem go na ! Env.myproperty, więc wybrałby zmienną środowiskową. Ale teraz działa idealnie. Bardzo dziękuję za Twoją pomoc. –

+6

Niestety, to podejście nie działa, gdy masz jawnie wyeksportowane inne profile. W tym przypadku niejawne wywołania profilu nie są wyzwalane ... – Anton

+1

To tylko wartość domyślna. Dlaczego maven jest tak skomplikowany? –

5

Ten sam problem występuje w naszej grupie rozwojowej, gdy używa się wartości środowiska do oznaczenia ścieżki systemu plików - konkretnie różnic między linuxem i oknami.

oparciu o inne rozwiązania na tym samym pytaniem:

<profile> 
    <id>MY_VAR default value</id> 
    <activation> 
     <property> 
      <name>!env.MY_VAR</name> 
     </property> 
    </activation> 
    <properties> 
     <env.MY_VAR>default value</env.MY_VAR> 
    </properties> 
</profile> 
+0

Używanie profilu ma niewielką wadę - nie będzie działać, gdy uruchomiony zostanie inny profil, nawet jeśli ustawiony jako domyślny. Musisz jawnie zażądać tego profilu podczas uruchamiania innych profili. –

+1

Lepszym rozwiązaniem byłoby użycie mrówki, ponieważ eksportuje ona zmienną dla wszystkich. Zobacz tutaj: http://stackoverflow.com/a/36770198/435605 –