2016-01-12 16 views
5

Ich würde gerne eine Umgebungsvariable verwenden können, wenn es gesetzt ist oder ein Standard-Fallback-Wert, den ich in pom.xml ähnlich $ {VARIABLE: -default} in bash gesetzt . Ist es möglich? Etwas wie:pom.xml Umgebungsvariable mit Standard Fallback

${env.BUILD_NUMBER:0} 
+2

Es gibt eine gute Antwort hier: http://stackoverflow.com/ a/13709976/868456 – Dimath

+0

@Dimath Lösungen scheint viel einfacher als die vorgeschlagene Antwort hier .. – lifeofguenter

Antwort

6

Sie Profile, dies zu erreichen nutzen könnten:

<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> 

Etwas ausführlicher als bash ...

+0

Soweit ich weiß, würde ich 'mvn -P Buildnumber-undefined übergeben müssen, nicht wahr? Wie würde ich es später in der pom.xml verwenden? – Gavriel

+0

Das entsprechende Profil wird basierend auf der Existenz oder Nicht-Existenz der Umgebungsvariable BUILD_NUMBER aktiviert. Anschließend sollte die Eigenschaft 'buildnumber' in Ihrem Pom definiert werden und mit' $ {buildnumber} 'aufgerufen werden. – StephaneM

+0

Soweit ich weiß, brauchen Sie dafür nicht zwei Profile (zumindest in den letzten Maven-Releases). Sie können einen Standard in der obersten Ebene '' bereitstellen und dann wird nur mit der benutzerdefinierten Aktivierung überschrieben (das erste Profil in dieser Antwort). Speichert 11 Zeilen :) – nerdwaller

9

ich mit dem akzeptierten Ansatz nicht wirklich zufrieden war, so Ich habe es ein wenig vereinfacht.

gesetzt Grundsätzlich eine Standardeigenschaft in den normalen Eigenschaften blockieren, und nur überschreiben, wenn entsprechende (anstelle einer effektiven switch-Anweisung):

<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>