2016-01-12 33 views
5

Vorrei poter utilizzare una variabile di ambiente se è impostata o un valore di fallback predefinito che ho impostato in pom.xml simile a $ {VARIABLE: -default} in bash . È possibile? Qualcosa di simile:variabile di ambiente pom.xml con fallback predefinito

${env.BUILD_NUMBER:0} 
+2

C'è una buona risposta qui: http://stackoverflow.com/ a/13709976/868456 – Dimath

+0

@Le soluzioni di Dimath sembrano essere molto più semplici della risposta proposta qui .. – lifeofguenter

risposta

6

Si potrebbe utilizzare i profili per raggiungere questo obiettivo:

<profiles> 
    <profile> 
     <id>buildnumber-defined</id> 
     <activation> 
      <property> 
       <name>env.BUILD_NUMBER</name> 
      </property> 
     </activation> 
     <properties> 
      <buildnumber>${env.BUILD_NUMBER}</buildnumber> 
     </properties> 
    </profile> 
    <profile> 
     <id>buildnumber-undefined</id> 
     <activation> 
      <property> 
       <name>!env.BUILD_NUMBER</name> 
      </property> 
     </activation> 
     <properties> 
      <buildnumber>0</buildnumber> 
     </properties> 
    </profile> 
</profiles> 

Un po 'più dettagliato di bash ...

+0

Per quanto ne so avrei bisogno di passare a 'mvn -P buildnumber-undefined', no? Come lo userei più avanti nel pom.xml? – Gavriel

+0

Il profilo appropriato verrà attivato in base all'esistenza o alla non esistenza della variabile di ambiente 'BUILD_NUMBER'. Successivamente la proprietà 'buildnumber' dovrebbe essere definita nel pom e si può accedere con' $ {buildnumber} '. – StephaneM

+0

Per quanto ne so, non sono necessari due profili per questo (almeno nelle recenti versioni di Maven). È possibile fornire un valore predefinito nel livello principale '' e quindi è solo sovrascritto con l'attivazione personalizzata (il primo profilo in questa risposta). Salva 11 righe :) – nerdwaller

9

non ero molto soddisfatto con l'approccio accettato, così L'ho semplificato un po '.

Fondamentalmente impostare una proprietà di default nelle proprietà blocco normale, e sovrascrivere solo al momento opportuno (al posto di uno switch efficace):

<properties> 
    <!-- Sane default --> 
    <buildNumber>0</buildNumber> 
    <!-- the other props you use --> 
</properties> 

<profiles> 
    <profile> 
     <id>ci</id> 
     <activation> 
      <property> 
       <name>env.buildNumber</name> 
      </property> 
     </activation> 
     <properties> 
      <!-- Override only if necessary --> 
      <buildNumber>${env.buildNumber}</buildNumber> 
     </properties> 
    </profile> 
</profiles>