Przeniosłem projekt z Eclipse do Maven i muszę ustawić zmienną środowiskową, aby mój projekt działał.
W Eclipse przechodzę do „Uruchom -> Uruchom konfiguracje” i na karcie „środowisko” ustawiam „WSNSHELL_HOME” na wartość „conf”.
Jak mogę to zrobić z Mavenem?
Dziękuję Ci bardzo!
java
maven
environment-variables
Gianluca
źródło
źródło
Odpowiedzi:
Możesz po prostu przekazać go w wierszu poleceń, jako
mvn -DmyVariable=someValue install
[Aktualizacja] Zauważ, że kolejność parametrów jest znacząca - musisz określić opcje przed poleceniem (ami). [/Aktualizacja]
W pliku POM możesz odwoływać się do zmiennych systemowych (określonych w wierszu poleceń lub w pom) jako
${myVariable}
, a zmienne środowiskowe jako${env.myVariable}
. (Podziękowania dla komentujących za korektę.)Aktualizacja2
OK, więc chcesz przekazać swoją zmienną systemową do testów. Jeśli - jak zakładam - do testowania używasz wtyczki Surefire , najlepiej jest określić potrzebne zmienne systemowe w pom, w swojej
plugins
sekcji, np.<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>
źródło
mvn -DWSNSHELL_HOME=conf test
.System.getenv("WSNSHELL_HOME");
czy jest poprawna?Te
-D
właściwości nie będą wiarygodne propagowane od SureFire-pluging do badania (nie wiem, dlaczego to działa z Eclipse). Używając maven w wierszu poleceń, użyj właściwości argLine, aby zawinąć swoją właściwość. To przejdzie ich do twojego testumvn -DargLine="-DWSNSHELL_HOME=conf" test
Służy
System.getProperty
do odczytywania wartości w kodzie. Zajrzyj do tego posta o różnicySystem.getenv
iSytem.getProperty
.źródło
${argLine}
symbol zastępczy, w przeciwnym razie parametry z wiersza poleceń nie zostaną pobrane. Przykład:<argLine>-Duser.timezone=UTC ${argLine}</argLine>
Możesz umieścić swoje polecenie maven w skrypcie bash:
#!/bin/bash export YOUR_VAR=thevalue mvn test unset YOUR_VAR
źródło
mvn install
nadal są w jakiś sposób zasłonięte. Jeśli jednak uruchomię ze skryptu powłoki, działa dobrze! Chciałabym zrozumieć, dlaczego tak się dzieje.Dla zmiennej środowiskowej w Maven możesz ustawić poniżej.
http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#environmentVariables http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html #Zmienne środowiska
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> ... <configuration> <includes> ... </includes> <environmentVariables> <WSNSHELL_HOME>conf</WSNSHELL_HOME> </environmentVariables> </configuration> </plugin>
źródło
Istnieje wtyczka maven o nazwie properties-maven-plugin, która służy
set-system-properties
do ustawiania zmiennych systemowych. Jest to szczególnie przydatne, jeśli masz plik zawierający wszystkie te właściwości. Możesz więc odczytać plik właściwości i ustawić je jako zmienne systemowe.źródło
Innym rozwiązaniem byłoby ustawienie
MAVEN_OPTS
(lub innych zmiennych środowiskowych) w${user.home}/.mavenrc
(lub%HOME%\mavenrc_pre.bat
w systemie Windows).Od wersji Maven 3.3.1 istnieją nowe możliwości ustawiania parametrów wiersza poleceń mvn , jeśli tego właśnie chcesz:
${maven.projectBasedir}/.mvn/maven.config
${maven.projectBasedir}/.mvn/jvm.config
źródło
w swoim kodzie dodaj:
System.getProperty("WSNSHELL_HOME")
Zmodyfikuj lub dodaj właściwość wartości z polecenia maven:
mvn clean test -DargLine=-DWSNSHELL_HOME=yourvalue
Jeśli chcesz uruchomić go w Eclipse, dodaj argumenty maszyny wirtualnej w konfiguracjach Debug / Run
nie musisz modyfikować POM
źródło
Zgodnie z dokumentacją z odpowiedzi @ Kevina, poniższa działała dla mnie przy ustawianiu zmiennej środowiskowej za pomocą wtyczki maven sure-fire
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <environmentVariables> <WSNSHELL_HOME>conf</WSNSHELL_HOME> </environmentVariables> </configuration>
źródło
Możesz przekazać niektóre argumenty przez
_JAVA_OPTIONS
zmienną.Na przykład zdefiniuj zmienną dla flag proxy maven w następujący sposób:
_JAVA_OPTIONS="-Dhttp.proxyHost=$http_proxy_host -Dhttp.proxyPort=$http_proxy_port -Dhttps.proxyHost=$https_proxy_host -Dhttps.proxyPort=$http_proxy_port"
A następnie użyj
mvn clean install
(automatycznie odbierze_JAVA_OPTIONS
).źródło