Zmienna środowiskowa z Maven


86

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!


Sugerowałbym uruchomienie projektu bez zmiennej środowiskowej. A potem przejdź do Maven.
khmarbaise

3
Nie ma powodu, aby pomijać użycie zmiennych środowiskowych, jeśli jest to przydatne dla twojego systemu i jestem pewien, że moje rozwiązanie działa (sam go używam). Zobacz moją wskazówkę dotyczącą „System.getenv” / „System.getProperty”.
FrVaBe

Odpowiedzi:


120

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 pluginssekcji, 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>

Muszę uruchomić `` test mvn '', wygląda na to, że nie działa, ponieważ jeśli napiszę test mvn -DWSNSHELL_HOME = conf Nadal otrzymuję wyjątek java.io.FileNotFoundException: null / wsnshell.conf (Brak takiego pliku lub katalogu)
Gianluca

2
@Janky, spróbuj na odwrót, tj mvn -DWSNSHELL_HOME=conf test.
Péter Török

nie ... :( Nadal dostaję java.io.FileNotFoundException: null / wsnshell.conf (Nie ma takiego pliku lub katalogu) ... w kodzie odczytałem zmienną w ten sposób .. System.getenv("WSNSHELL_HOME");czy jest poprawna?
Gianluca

@Janky, chwileczkę, uruchamiasz aplikację bezpośrednio z kompilacji Mavena, czy ...?
Péter Török

43
Mylicie zmienne środowiskowe z właściwościami systemu. Opcja -D polecenia ustawia tylko właściwości systemu.
Wouter Lievens

25

Te -Dwł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 testu

mvn -DargLine="-DWSNSHELL_HOME=conf" test

Służy System.getPropertydo odczytywania wartości w kodzie. Zajrzyj do tego posta o różnicy System.getenvi Sytem.getProperty.


2
Należy czytać właściwość z System.getProperty („WSNSHELL_HOME”) zamiast używać System.getenv.
FrVaBe

Idealnie, po spędzeniu DUŻO czasu na próbowaniu innych rzeczy, ten działał dla mnie.
Bhushan,

Jeśli skonfigurowałeś parametry argLine dla pewnej wtyczki w swoim pom.xml, dodaj ${argLine}symbol zastępczy, w przeciwnym razie parametry z wiersza poleceń nie zostaną pobrane. Przykład:<argLine>-Duser.timezone=UTC ${argLine}</argLine>
sorrymissjackson

To zadziałało dla mnie, dzięki! Cóż za fajne narzędzie do konfigurowania sys-props do testów Mavena. Wciąż na pierwszy rzut oka jest to bardzo zagmatwane, dlaczego nie może ich używać bezpośrednio, ale wymaga dodatkowego argumentu.
phi

9

Możesz umieścić swoje polecenie maven w skrypcie bash:

#!/bin/bash

export YOUR_VAR=thevalue
mvn test
unset YOUR_VAR

Niewiarygodne, że jest to jedyna metoda, która całkowicie zadziałała przy użyciu wtyczki Surefire. Z około 10 zmiennych środowiska, które ustawiłem w POM, dwie z nich nie są widoczne podczas testu. Nawet jeśli wstawię je do muszli, a potem mvn installnadal 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.
Pete

Uważam, że powinna to być akceptowana odpowiedź, ponieważ jest to najprostsze rozwiązanie
wtsiamruk

5

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>

4

Istnieje wtyczka maven o nazwie properties-maven-plugin, która służy set-system-propertiesdo 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.


3

Innym rozwiązaniem byłoby ustawienie MAVEN_OPTS(lub innych zmiennych środowiskowych) w ${user.home}/.mavenrc(lub %HOME%\mavenrc_pre.batw 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

1

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

  • Przejdź do Uruchom -> Uruchom konfiguracje
  • Wybierz Argumenty zakładki
  • Dodaj w sekcji Argumenty maszyny wirtualnej

-DWSNSHELL_HOME = twoja wartość

Zobacz przykład obrazu

nie musisz modyfikować POM


0

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>

0

Możesz przekazać niektóre argumenty przez _JAVA_OPTIONSzmienną.

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).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.