2012-03-14 13 views
5

Ho un profilo Maven e voglio impostare una proprietà che è in seguito disponibile per System.getProperty (..) in Java:imposta la proprietà del sistema java durante la compilazione di maven 2?

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

voglio System.getProperty("my.comp.my.prop") essere "myValue" ma è null .. Come fare L'ho impostato correttamente? :)

Grazie!

+0

Vuoi davvero dire 'compilare'? O forse i test unitari? – bmargulies

+0

Cosa intendi per "più tardi disponibile"? Ad esempio, si imposta una proprietà di sistema usando '-Dmy.comp.mu.prop = foo' quando si esegue l'app. –

+0

Da qualche parte nel mio codice lato server voglio leggere la proprietà per fare cose diverse quando compilato in diversi profili di compilazione. – Stuck

risposta

1

maven non può impostare una proprietà a cui l'applicazione può accedere dall'ambiente in fase di esecuzione.

Invece, è possibile utilizzare Maven per aggiornare un file di proprietà nella base di codice durante il tempo di compilazione, che può quindi essere letto dall'applicazione in fase di esecuzione. È possibile impostare diversi valori della proprietà in base al profilo, consentendo così all'applicazione di avere valori diversi come desiderato.

In alternativa, è possibile richiamare l'applicazione impostando manualmente la proprietà desiderata nell'ambiente (fuori dall'ambiente).

+0

Grazie! Esiste una procedura standard su come creare e leggere un file di proprietà? – Stuck

+0

Solo per ulteriori lettori, questo viene fatto usando la capacità di filtraggio del plugin Maven Resources: http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html –

10

properties-maven-plugin plugin vi aiuterà a fare esattamente quello che stai cercando:

<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

Questo mi dà: Tag non riconosciuto: 'esecuzioni ' – Matt

+1

Se ho capito bene, questo imposta le proprietà per il ciclo di vita di Maven, mettendole non disponibili per Java in fase di runtime. Ho provato che non avrebbe avuto successo. Non ho ragione? –

+0

@ yegor256 Se sei ancora lì in SO: immagino che senso abbia John B. Le proprietà qui sono per il ciclo di vita di Maven. Inserisco un -1 per la risposta che ritengo non corretto nel contesto della Q. Lo sveglierò se riesci a chiarire i commenti di John. – dirai

Problemi correlati