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?
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
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
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:
( [~ # ~] note [~ # ~]: Ich habe maven v3.0.5 verwendet.)
Ich hoffe das kann jemandem helfen ....
Können wir nicht verwenden
<properties>
<my.variable>${env.MY_VARIABLE}</my.variable>
</properties>
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:
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.
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>
Geben Sie in com.google.code.maven-replacer-plugin den Wiederbeschaffungswert ${foo}
Ein.
Fügen Sie in meinem Shell-Skript, das maven aufruft, Folgendes zum Befehl hinzu: -Dfoo=$foo