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.