web-dev-qa-db-de.com

Wie verweise ich auf eine Umgebungsvariable in POM.xml?

Ich benutze Maven als Build-Tool. Ich habe eine Umgebungsvariable mit dem Namen env festgelegt. Wie kann ich auf den Wert dieser Umgebungsvariablen in der Datei pom.xml Zugreifen?

146
user1016403

Lesen Sie den Maven Properties Guide ...

Wie Seshagiri in den Kommentaren betonte, ${env.VARIABLE_NAME} wird machen was du willst.

Ich werde ein Wort der Warnung hinzufügen und sagen, dass ein pom.xml sollte Ihr Projekt vollständig beschreiben, verwenden Sie daher Umgebungsvariablen mit Bedacht. Wenn Sie Ihre Builds von Ihrer Umgebung abhängig machen, sind sie schwerer zu reproduzieren

187
Andrew White

Es ist möglicherweise sicherer, Umgebungsvariablen direkt an die Eigenschaften des Maven-Systems zu übergeben. Angenommen, Sie möchten unter Linux auf die Umgebungsvariable MY_VARIABLE zugreifen. Sie können eine Systemeigenschaft in Ihrer POM-Datei verwenden.

<properties>
    ...
    <!-- Default value for my.variable can be defined here -->
    <my.variable>foo</my.variable>
    ...
</properties>
...
<!-- Use my.variable -->
... ${my.variable} ...

Legen Sie den Eigenschaftswert in der Maven-Befehlszeile fest:

mvn clean package -Dmy.variable=$MY_VARIABLE
24
EricGreg

Stellen Sie außerdem sicher, dass Ihre Umgebungsvariable nur aus GROSSBUCHSTABEN zusammengesetzt ist .... Ich weiß nicht warum (die Dokumentation sagt nichts) nichts explizites darüber, zumindest der von @Andrew White bereitgestellte Link), aber wenn die Variable ein Wort in Kleinbuchstaben ist (z. B. env.dummy), wurde die Variable immer leer oder null ...

ich hatte eine knappe Stunde damit zu kämpfen, bis ich mich entschied, ein UPPER CASE VARIABLE auszuprobieren und das Problem zu lösen.

Beispiele für OK-Variablen:

  • DUMMY
  • DUMMY_ONE
  • JBOSS_SERVER_PATH

( [~ # ~] note [~ # ~]: Ich habe maven v3.0.5 verwendet.)

Ich hoffe das kann jemandem helfen ....

19
Carlitos Way

Können wir nicht verwenden

<properties>
    <my.variable>${env.MY_VARIABLE}</my.variable>
</properties>
10
tmjee

Ich hatte mit dem gleichen Problem zu kämpfen: Ich führte ein Shell-Skript aus, das Variablen festlegte, und wollte dann die Variablen im shared-pom verwenden. Ziel war es, dass Umgebungsvariablen mithilfe des com.google.code.maven-replacer-plugins Zeichenfolgen in meinen Projektdateien ersetzen.

Die Verwendung von ${env.foo} Oder ${env.FOO} Hat bei mir nicht funktioniert. Maven fand die Variable einfach nicht. Was funktionierte, war die Übergabe der Variablen als Befehlszeilenparameter in Maven. Hier ist das Setup:

  1. Legen Sie die Variable im Shell-Skript fest. Wenn Sie Maven in einem Unterskript starten, stellen Sie sicher, dass die Variable gesetzt wird, z. Verwenden Sie source ./maven_script.sh, um es vom übergeordneten Skript aufzurufen.

  2. Erstellen Sie in shared-pom einen Befehlszeilenparameter, der die Umgebungsvariable erfasst:

 <Plugin> 
 ... 
 <Ausführungen> 
 <Ausführungen> 
 ... 
 <Ausführung> 
 ... 
 <configuration> 
 <param> $ {foo} </ param> <! - Beachten Sie, dass dies * nicht * $ {env.foo} -> 
 </ configuration> 
  1. Geben Sie in com.google.code.maven-replacer-plugin den Wiederbeschaffungswert ${foo} Ein.

  2. Fügen Sie in meinem Shell-Skript, das maven aufruft, Folgendes zum Befehl hinzu: -Dfoo=$foo

3
fjones