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!
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.)
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>
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
.
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.
Vous pouvez envelopper votre commande maven dans un script bash:
#!/bin/bash
export YOUR_VAR=thevalue
mvn test
unset YOUR_VAR
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>
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
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
-DWSNSHELL_HOME = votre valeur
vous n'avez pas besoin de modifier le POM