web-dev-qa-db-fra.com

Environnement variable avec Maven

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

Dans Eclipse, je clique sur "Exécuter -> Exécuter les configurations" et, sous l'onglet "environnement", je règle "WSNSHELL_HOME" sur la valeur "conf".

Comment puis-je faire cela avec Maven?

Merci beaucoup!

71
Gianluca

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 les options avant la commande (s). ). [/ Update]

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

Mise à jour2

OK, vous voulez donc transmettre votre variable système à vos tests. Si - comme je le suppose - vous utilisez le plug-in Surefire pour le test, le mieux est de spécifier la ou les variables système nécessaires dans le pom, dans votre section plugins, 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>
106
Péter Török

Le -D Les propriétés ne seront pas fiables depuis le surefire-pluging jusqu'à votre test (je ne sais pas pourquoi cela fonctionne avec Eclipse). Lorsque vous utilisez maven sur la ligne de commande, utilisez la propriété argLine pour envelopper votre propriété. Cela les passera à votre test

mvn -DargLine="-DWSNSHELL_HOME=conf" test

Utilisation System.getProperty pour lire la valeur dans votre code. Jetez un oeil à this post sur la différence de System.getenv et Sytem.getProperty.

22
FrVaBe

Il existe un plugin maven appelé properties-maven-plugin celui-ci fournit un objectif set-system-properties pour définir les variables système. Ceci est particulièrement utile si vous avez un fichier contenant toutes ces propriétés. Vous pouvez donc lire un fichier de propriétés et les définir en tant que variable système.

4
Christian Lutz

Vous pouvez envelopper votre commande maven dans un script bash:

#!/bin/bash

export YOUR_VAR=thevalue
mvn test
unset YOUR_VAR
3
modle13

Pour la variable d'environnement dans Maven, vous pouvez définir ci-dessous.

http://maven.Apache.org/surefire/maven-surefire-plugin/test-mojo.html#environmentVariableshttp://maven.Apache.org/surefire/maven- fail-safe-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>
3
Kevin

Une autre solution serait de définir MAVEN_OPTS (ou d’autres variables d’environnement) dans ${user.home}/.mavenrc (ou %HOME%\mavenrc_pre.bat sur les fenêtres).

Depuis Maven 3.3.1, il y a nouvelles possibilités de définir les paramètres de ligne de commande mvn , si c'est ce que vous voulez réellement:

  • ${maven.projectBasedir}/.mvn/maven.config
  • ${maven.projectBasedir}/.mvn/jvm.config
1
René

dans votre code, ajoutez:

System.getProperty("WSNSHELL_HOME")

Modifiez ou ajoutez une propriété de valeur à partir de la commande maven:

mvn clean test -DargLine=-DWSNSHELL_HOME=yourvalue

Si vous voulez l'exécuter dans Eclipse, ajoutez les arguments VM dans vos configurations Debug/Run

  • Aller à Exécuter -> Exécuter les configurations
  • Sélectionnez les arguments de l'onglet
  • Ajouter dans la section VM Arguments

-DWSNSHELL_HOME = votre valeur

See image example

vous n'avez pas besoin de modifier le POM