2012-03-14 17 views
5

Mam profil maven i chcemy ustawić właściwość, która jest później dostępny za System.getProperty (..) w Java:ustawić właściwość systemu java podczas kompilacji maven 2?

<profile> 
    <id>local-dev</id> 
    <properties> 
    <my.comp.my.prop>myValue</my.comp.my.prop> 
    </properties> 
</profile> 

Chcę System.getProperty("my.comp.my.prop") być "myValue" ale null .. Jak zrobić Ustawiłem to poprawnie? :)

Thansk!

+0

Czy naprawdę oznacza „kompilacji”? A może jednostka testuje? – bmargulies

+0

Co masz na myśli przez "później dostępny"? Ustawiasz właściwość systemową, na przykład, używając '-Dmy.comp.mu.prop = foo' podczas uruchamiania aplikacji. –

+0

Gdzieś w moim kodzie po stronie serwera chcę przeczytać właściwość, aby robić różne rzeczy, gdy kompilowane w różnych profilach kompilacji. – Stuck

Odpowiedz

1

maven nie może ustawić właściwości, do której aplikacja będzie miała dostęp ze środowiska w czasie wykonywania.

Zamiast tego można użyć programu maven do aktualizacji pliku właściwości w bazie kodu w czasie kompilacji, który może zostać odczytany przez aplikację w czasie wykonywania. Różne wartości właściwości można ustawić na podstawie profilu, dzięki czemu aplikacja może mieć różne wartości według potrzeb.

Alternatywnie, można wywołać ręcznie ustawienie żądanej właściwości w środowisku ręcznie (z zewnątrz).

+0

Dzięki! Czy istnieje standardowa procedura tworzenia i odczytu takiego pliku właściwości? – Stuck

+0

Tylko dla dalszych czytelników, robi się to za pomocą funkcji filtrowania Maven Resources Plugin: http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html –

10

properties-maven-plugin plugin pomoże Ci zrobić dokładnie to, czego szukasz:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>properties-maven-plugin</artifactId> 
    <version>1.0-alpha-2</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>set-system-properties</goal> 
      </goals> 
      <configuration> 
       <properties> 
        <property> 
         <name>my.property.name</name> 
         <value>my.property.value</value> 
        </property> 
       </properties> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+0

To daje mi: Nierozpoznany tag: 'executions ' – Matt

+1

Jeśli dobrze rozumiem, to ustawia właściwości dla cyklu życia maven, nie są one dostępne dla java w czasie wykonywania. Próbowałem, nie odniesie to sukcesu. Czy nie mam racji? –

+0

@ yegor256 Jeśli nadal jesteś w SO: Zgaduję, co mówi John B. Właściwości tutaj są dla cyklu życia maven. Wpisuję -1 dla twojej odpowiedzi, która moim zdaniem jest niepoprawna w kontekście Q. Przekażę to, jeśli potrafisz wyjaśnić komentarze Johna. – dirai

Powiązane problemy