Змінна середовища з Maven


86

Я переніс проект з Eclipse на Maven, і мені потрібно встановити змінну середовища, щоб змусити свій проект працювати.

В Eclipse я переходжу до "Виконати -> Конфігурації запуску", і на вкладці "Середовище" я встановлюю для "WSNSHELL_HOME" значення "conf".

Як я можу це зробити з Maven?

Дуже дякую!


Я б запропонував запустити ваш проект без змінної середовища. А потім перейти до maven.
khmarbaise

3
Немає жодної причини пропускати використання змінних середовища, якщо це корисно для вашої системи, і я впевнений, що моє рішення працює (я використовую його сам). Дивіться мій підказку щодо "System.getenv" / "System.getProperty".
FrVaBe

Відповіді:


120

Ви можете просто передати його в командному рядку, як

mvn -DmyVariable=someValue install

[Оновлення] Зауважте, що порядок параметрів є значним - вам потрібно вказати будь-які параметри перед командами. [/ Оновлення]

У файлі POM ви можете посилатися на системні змінні (вказані в командному рядку або в pom) як ${myVariable}, а на змінні середовища як ${env.myVariable}. (Дякую коментаторам за виправлення.)

Оновлення2

Добре, отже, ви хочете передати системну змінну на тести. Якщо - як я припускаю - ви використовуєте плагін Surefire для тестування, найкраще вказати необхідні системні змінні в межах пом, у вашому pluginsрозділі, наприклад

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

Мені потрібно запустити 'mvn test', здається, це не працює, бо якщо я напишу mvn test -DWSNSHELL_HOME = conf, я все одно отримаю виняток java.io.FileNotFoundException: null / wsnshell.conf (такого файлу чи каталогу немає)
Джанлука,

2
@Janky, спробуй навпаки, тобто mvn -DWSNSHELL_HOME=conf test.
Péter Török

nope ... :( Я все ще отримую java.io.FileNotFoundException: null / wsnshell.conf (такого файлу чи каталогу немає) ... у коді я прочитав змінну таким чином .. System.getenv("WSNSHELL_HOME");це правильно?
Джанлука

@Janky, почекай трохи, ти запускаєш додаток безпосередньо зі збірки Maven, або ...?
Péter Török

43
Ви вдвох плутаєте змінні середовища із властивостями системи. Параметр команди -D встановлює лише Властивості системи.
Wouter Lievens

25

Ці -Dвластивості не будуть надійними розмножують від безпомилкового-pluging до тесту (я не знаю , чому він працює з затемненням). Використовуючи maven у командному рядку, використовуйте властивість argLine для обтікання вашого властивості. Це передасть їх вашому тесту

mvn -DargLine="-DWSNSHELL_HOME=conf" test

Використовуйте System.getPropertyдля зчитування значення у коді. Погляньте на цю публікацію про різницю System.getenvта Sytem.getProperty.


2
Вам слід прочитати властивість із System.getProperty ("WSNSHELL_HOME") замість використання System.getenv.
FrVaBe

Прекрасно, витративши ВАГАТО часу на спроби інших речей, ця спрацювала на мене.
Bhushan

Якщо ви налаштували параметри argLine для надійного плагіна у вашому pom.xml, додайте ${argLine}заповнювач, інакше параметри з командного рядка не будуть підхоплені. Приклад:<argLine>-Duser.timezone=UTC ${argLine}</argLine>
sorrymissjackson

Це спрацювало для мене, дякую! Який чудовий інструмент для налаштування sys-props для тестів maven. Досі на перший погляд це дуже заплутано, чому він не може використовувати їх безпосередньо, але вимагає додаткового аргументу.
фі

9

Ви можете обернути свою команду maven у скрипт bash:

#!/bin/bash

export YOUR_VAR=thevalue
mvn test
unset YOUR_VAR

Неймовірно, це єдиний метод, який повністю спрацював у мене за допомогою плагіна Surefire. З 10 або близько того, що я встановив у POM, два з них не видно під час пробного запуску. Навіть якщо я вкладаю їх у оболонку, а потім mvn install, вони все одно якимось затемнені. Однак, якщо я запускаю сценарій оболонки, він працює нормально! Я би хотів зрозуміти, чому це трапляється.
Піт,

Я вважаю, що це має бути прийнятою відповіддю, оскільки це найпростіше рішення
wtsiamruk

5

Для змінної середовища в Maven ви можете встановити нижче.

http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#environmentVariables http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html # середовищеЗмінні

<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

Існує плагін maven з назвою properties-maven-plugin, який передбачає set-system-propertiesвстановлення системних змінних. Це особливо корисно, якщо у вас є файл, що містить усі ці властивості. Отже, ви можете прочитати файл властивостей і встановити їх як системну змінну.


3

Іншим рішенням було б встановити MAVEN_OPTS(або інші змінні середовища) у ${user.home}/.mavenrc(або %HOME%\mavenrc_pre.batу вікнах).

Починаючи з Maven 3.3.1, є нові можливості встановити параметри командного рядка mvn , якщо це те, що ви насправді хочете:

  • ${maven.projectBasedir}/.mvn/maven.config
  • ${maven.projectBasedir}/.mvn/jvm.config

1

у своєму коді додайте:

System.getProperty("WSNSHELL_HOME")

Змінити або додати властивість значення з команди maven:

mvn clean test -DargLine=-DWSNSHELL_HOME=yourvalue

Якщо ви хочете запустити його в Eclipse, додайте аргументи VM у ваші конфігурації налагодження / запуску

  • Перейдіть до пункту Виконати -> Запустити конфігурації
  • Виберіть Аргументи вкладок
  • Додайте в розділ Аргументи VM

-DWSNSHELL_HOME = ваше значення

Див. Приклад зображення

вам не потрібно змінювати POM


0

Наслідуючи документацію з відповіді @ Kevin, наведена нижче працювала для мене для встановлення змінної середовища за допомогою плагіна 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

Ви можете передавати деякі аргументи через _JAVA_OPTIONSзмінну.

Наприклад, визначте змінну для прапорів maven проксі так:

_JAVA_OPTIONS="-Dhttp.proxyHost=$http_proxy_host -Dhttp.proxyPort=$http_proxy_port -Dhttps.proxyHost=$https_proxy_host -Dhttps.proxyPort=$http_proxy_port"

А потім використовуйте mvn clean install(він автоматично підніметься _JAVA_OPTIONS).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.