Transferi um projeto do Eclipse para o Maven e preciso definir uma variável de ambiente para fazer meu projeto funcionar.
No Eclipse, vou para "Executar -> Executar configurações" e, na guia "ambiente", defino "WSNSHELL_HOME" com o valor "conf".
Como posso fazer isso com o Maven?
Muito obrigado!
java
maven
environment-variables
Gianluca
fonte
fonte
Respostas:
Você pode simplesmente passá-lo na linha de comando, como
mvn -DmyVariable=someValue install
[Atualizar] Observe que a ordem dos parâmetros é significativa - você precisa especificar qualquer opção antes do (s) comando (s). [/Atualizar]
No arquivo POM, você pode se referir às variáveis do sistema (especificadas na linha de comando ou no pom) como
${myVariable}
e às variáveis de ambiente como${env.myVariable}
. (Obrigado aos comentaristas pela correção.)Update2
OK, então você deseja passar sua variável de sistema para seus testes. Se - como eu suponho - você usar o plug-in Surefire para teste, o melhor é especificar as variáveis de sistema necessárias dentro do pom, em sua
plugins
seção, por exemplo<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>
fonte
mvn -DWSNSHELL_HOME=conf test
.System.getenv("WSNSHELL_HOME");
está correto?As
-D
propriedades não serão propagadas de forma confiável do plug-in infalível para o seu teste (não sei por que funciona com o eclipse). Ao usar maven na linha de comando, use a propriedade argLine para envolver sua propriedade. Isso os passará para o seu testemvn -DargLine="-DWSNSHELL_HOME=conf" test
Use
System.getProperty
para ler o valor em seu código. Dê uma olhada neste post sobre a diferença deSystem.getenv
eSytem.getProperty
.fonte
${argLine}
marcador, caso contrário, os parâmetros da linha de comando não serão selecionados. Exemplo:<argLine>-Duser.timezone=UTC ${argLine}</argLine>
Você pode envolver seu comando maven em um script bash:
#!/bin/bash export YOUR_VAR=thevalue mvn test unset YOUR_VAR
fonte
mvn install
, eles ainda estão de alguma forma obscurecidos. No entanto, se eu executar a partir de um script de shell, ele funcionará bem! Eu gostaria de entender por que isso acontece.Para a variável de ambiente no Maven, você pode definir abaixo.
http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#environmentVariables http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html #variáveis ambientais
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> ... <configuration> <includes> ... </includes> <environmentVariables> <WSNSHELL_HOME>conf</WSNSHELL_HOME> </environmentVariables> </configuration> </plugin>
fonte
Existe um plugin maven chamado properties-maven-plugin, este fornece um objetivo
set-system-properties
para definir variáveis de sistema. Isso é especialmente útil se você tiver um arquivo contendo todas essas propriedades. Assim, você pode ler um arquivo de propriedades e defini-los como variáveis de sistema.fonte
Outra solução seria definir
MAVEN_OPTS
(ou outras variáveis de ambiente) no${user.home}/.mavenrc
(ou%HOME%\mavenrc_pre.bat
no Windows).Desde o Maven 3.3.1, existem novas possibilidades para definir parâmetros de linha de comando mvn , se isso é o que você realmente deseja:
${maven.projectBasedir}/.mvn/maven.config
${maven.projectBasedir}/.mvn/jvm.config
fonte
no seu código, adicione:
System.getProperty("WSNSHELL_HOME")
Modifique ou adicione propriedade de valor a partir do comando maven:
mvn clean test -DargLine=-DWSNSHELL_HOME=yourvalue
Se você deseja executá-lo no Eclipse, adicione argumentos VM em suas configurações de Depurar / Executar
você não precisa modificar o POM
fonte
Seguindo a documentação da resposta de @Kevin, a seguinte funcionou para mim para definir a variável de ambiente com o 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>
fonte
Você pode passar alguns dos argumentos por meio da
_JAVA_OPTIONS
variável.Por exemplo, defina uma variável para sinalizadores de proxy maven como este:
_JAVA_OPTIONS="-Dhttp.proxyHost=$http_proxy_host -Dhttp.proxyPort=$http_proxy_port -Dhttps.proxyHost=$https_proxy_host -Dhttps.proxyPort=$http_proxy_port"
E então use
mvn clean install
(ele pegará automaticamente_JAVA_OPTIONS
).fonte