123 votes

Variable d'environnement avec Maven

J'ai porté un projet d'Eclipse à Maven et je dois définir une variable d'environnement pour que mon projet fonctionne.

Dans Eclipse, je vais dans "Run -> Run configurations" et, sous l'onglet "environment", je mets "WSNSHELL_HOME" à la valeur "conf".

Comment puis-je faire cela avec Maven ?

154voto

Péter Török Points 72981

Vous pouvez simplement le passer sur la ligne de commande, comme

mvn -DmyVariable=someValue install

[Mise à jour] Notez que l'ordre des paramètres est important - vous devez spécifier toutes les options avant la ou les commandes. [/Mise à jour]

Dans le fichier POM, vous pouvez faire référence à des variables système (spécifiées sur la ligne de commande ou dans le fichier pom) en tant que ${myVariable} et les variables d'environnement comme ${env.myVariable} . (Merci aux commentateurs pour la correction).

Mise à jour2

OK, donc vous voulez passer votre variable système à vos tests. Si - comme je le suppose - vous utilisez la fonction Un plugin infaillible pour les tests, le mieux est de spécifier la ou les variables système nécessaires au sein du pom, dans votre fichier plugins section, par exemple

<build>
    <plugins>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            ...
            <configuration>
                ...
                <systemPropertyVariables>
                    <WSNSHELL_HOME>conf</WSNSHELL_HOME>
                </systemPropertyVariables>
            </configuration>
        </plugin>
        ...
    </plugins>
</build>

31voto

FrVaBe Points 14559

En -D Les propriétés ne seront pas propagées de manière fiable du surefire-pluging à votre test (je ne sais pas pourquoi cela fonctionne avec eclipse). Lorsque vous utilisez maven en ligne de commande, utilisez l'option argLine pour envelopper votre propriété. Ceci les passera à votre test

mvn -DargLine="-DWSNSHELL_HOME=conf" test

Utilice System.getProperty pour lire la valeur dans votre code. Jetez un coup d'œil à este post sur la différence entre System.getenv y Sytem.getProperty .

22voto

modle13 Points 465

Vous pourriez envelopper votre commande maven dans un script bash :

#!/bin/bash

export YOUR_VAR=thevalue
mvn test
unset YOUR_VAR

13voto

Kevin Points 111

Pour les variables d'environnement dans Maven, vous pouvez définir ce qui suit.

http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#environmentVariables http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html#environmentVariables

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    ...
    <configuration>
        <includes>
            ...
        </includes>
        <environmentVariables>
            <WSNSHELL_HOME>conf</WSNSHELL_HOME>
        </environmentVariables>
    </configuration>
</plugin>

7voto

Yuvaraj G Points 949

En suivant la documentation de la réponse de @Kevin, la réponse ci-dessous a fonctionné pour moi pour définir la variable d'environnement avec le plugin maven sure-fire.

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
    <environmentVariables>
        <WSNSHELL_HOME>conf</WSNSHELL_HOME>
    </environmentVariables>
</configuration>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X