He portado un proyecto de Eclipse a Maven y necesito establecer una variable de entorno para que mi proyecto funcione.
En Eclipse, voy a "Ejecutar -> Ejecutar configuraciones" y, en la pestaña "entorno", establezco "WSNSHELL_HOME" en el valor "conf".
¿Cómo puedo hacer esto con Maven?
¡Muchas gracias!
java
maven
environment-variables
Gianluca
fuente
fuente
Respuestas:
Puede simplemente pasarlo en la línea de comando, como
mvn -DmyVariable=someValue install
[Actualización] Tenga en cuenta que el orden de los parámetros es importante: debe especificar cualquier opción antes de los comandos. [/Actualizar]
Dentro del archivo POM, puede referirse a las variables del sistema (especificadas en la línea de comando o en el pom) como
${myVariable}
, y las variables de entorno como${env.myVariable}
. (Gracias a los comentaristas por la corrección).Actualización2
Bien, entonces desea pasar su variable de sistema a sus pruebas. Si, como supongo, usa el complemento Surefire para realizar pruebas, lo mejor es especificar las variables del sistema necesarias dentro del pom, en su
plugins
sección, por ejemplo<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>
fuente
mvn -DWSNSHELL_HOME=conf test
.System.getenv("WSNSHELL_HOME");
es correcta?Las
-D
propiedades no serán propagadas de manera confiable desde el seguro infalible hasta su prueba (no sé por qué funciona con eclipse). Cuando use maven en la línea de comando, use la propiedad argLine para envolver su propiedad. Esto los pasará a tu prueba.mvn -DargLine="-DWSNSHELL_HOME=conf" test
Use
System.getProperty
para leer el valor en su código. Eche un vistazo a esta publicación sobre la diferencia deSystem.getenv
ySytem.getProperty
.fuente
${argLine}
marcador de posición; de lo contrario, los parámetros de la línea de comando no se recogerán. Ejemplo:<argLine>-Duser.timezone=UTC ${argLine}</argLine>
Puede envolver su comando maven en un script bash:
#!/bin/bash export YOUR_VAR=thevalue mvn test unset YOUR_VAR
fuente
mvn install
, todavía están ocultos de alguna manera. Sin embargo, si ejecuto desde un script de shell, ¡funciona bien! Ojalá entendiera por qué sucede esto.Para la variable de entorno en Maven, puede establecer a continuación.
http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#environmentVariables http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html #Variables de entorno
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> ... <configuration> <includes> ... </includes> <environmentVariables> <WSNSHELL_HOME>conf</WSNSHELL_HOME> </environmentVariables> </configuration> </plugin>
fuente
Hay un complemento de maven llamado properties-maven-plugin que proporciona un objetivo
set-system-properties
para establecer variables del sistema. Esto es especialmente útil si tiene un archivo que contiene todas estas propiedades. Por lo tanto, puede leer un archivo de propiedades y establecerlo como variable de sistema.fuente
Otra solución sería establecer
MAVEN_OPTS
(u otras variables de entorno) en${user.home}/.mavenrc
(o%HOME%\mavenrc_pre.bat
en Windows).Desde Maven 3.3.1 hay nuevas posibilidades para configurar los parámetros de la línea de comando mvn , si esto es lo que realmente desea:
${maven.projectBasedir}/.mvn/maven.config
${maven.projectBasedir}/.mvn/jvm.config
fuente
en su código agregue:
System.getProperty("WSNSHELL_HOME")
Modifique o agregue valor a la propiedad del comando maven:
mvn clean test -DargLine=-DWSNSHELL_HOME=yourvalue
Si desea ejecutarlo en Eclipse, agregue argumentos de VM en sus configuraciones de depuración / ejecución
no es necesario modificar el POM
fuente
Siguiendo la documentación de la respuesta de @ Kevin, la siguiente me funcionó para configurar la variable de entorno con el complemento seguro de maven
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <environmentVariables> <WSNSHELL_HOME>conf</WSNSHELL_HOME> </environmentVariables> </configuration>
fuente
Puede pasar algunos de los argumentos a través de la
_JAVA_OPTIONS
variable.Por ejemplo, defina una variable para los indicadores de proxy de maven como esta:
_JAVA_OPTIONS="-Dhttp.proxyHost=$http_proxy_host -Dhttp.proxyPort=$http_proxy_port -Dhttps.proxyHost=$https_proxy_host -Dhttps.proxyPort=$http_proxy_port"
Y luego use
mvn clean install
(se activará automáticamente_JAVA_OPTIONS
).fuente