web-dev-qa-db-fra.com

Comment référencer la variable d'environnement dans POM.xml?

J'utilise Maven comme outil de construction. J'ai défini une variable d'environnement appelée env. Comment puis-je accéder à la valeur de cette variable d'environnement dans le fichier pom.xml?

146
user1016403

Découvrez le Guide des propriétés Maven ...

Comme Seshagiri l'a souligné dans les commentaires, ${env.VARIABLE_NAME} fera ce que vous voulez.

J'ajouterai un mot d'avertissement et dirai qu'un pom.xml devrait décrire complètement votre projet, veuillez donc utiliser judicieusement les variables d'environnement. Si vous faites dépendre vos builds de votre environnement, ils sont plus difficiles à reproduire.

187
Andrew White

Il peut être plus sûr de passer directement les variables d’environnement aux propriétés du système maven. Par exemple, disons que sous Linux, vous souhaitez accéder à la variable d'environnement MY_VARIABLE. Vous pouvez utiliser une propriété système dans votre fichier pom.

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

Définissez la valeur de la propriété sur la ligne de commande maven:

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

Assurez-vous également que votre variable d’environnement est composé uniquement par des lettres majuscules .... Je ne sais pas pourquoi (la documentation ne dit rien d’explicite à ce sujet). , au moins le lien fourni par @Andrew White), mais si la variable est un mot minuscule (par exemple, env.dummy), la variable est toujours vide ou vide ...

je me débattais avec cela pendant une heure, jusqu’à ce que j’ai décidé d’essayer une VARIABLE UPPER CASE et un problème résolu.

OK Variables Exemples:

  • MANNEQUIN
  • DUMMY_ONE
  • JBOSS_SERVER_PATH

(NOTE: J'utilisais maven v3.0.5)

J'espère que cela peut aider quelqu'un ....

19
Carlitos Way

Ne pouvons-nous pas utiliser

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

Je me débattais avec la même chose, en exécutant un script Shell qui définissait des variables, puis en voulant utiliser les variables du pom partagé. L'objectif était de faire en sorte que les variables d'environnement remplacent les chaînes dans mes fichiers de projet à l'aide de com.google.code.maven-replacer-plugin.

Utiliser ${env.foo} ou ${env.FOO} ne fonctionnait pas pour moi. Maven n'a tout simplement pas trouvé la variable. Ce qui a bien fonctionné a été de passer la variable en tant que paramètre de ligne de commande dans Maven. Voici la configuration:

  1. Définissez la variable dans le script Shell. Si vous lancez Maven dans un sous-script, assurez-vous que la variable est définie, par exemple. en utilisant source ./maven_script.sh pour l'appeler à partir du script parent.

  2. Dans shared-pom, créez un paramètre de ligne de commande qui récupère la variable d'environnement:

 <plugin> 
 ... 
 <exécutions> 
 <exécutions> 
 ... 
 <exécution> 
 ... 
 <configuration> 
 <param> $ {foo} </ param> <! - Notez que ce n'est * pas * $ {env.foo} -> 
 </ configuration> 
  1. Dans com.google.code.maven-replacer-plugin, définissez la valeur de remplacement ${foo}.

  2. Dans mon script Shell qui appelle maven, ajoutez ceci à la commande: -Dfoo=$foo

3
fjones