Переменная среды с Maven
Я портировал проект из Eclipse в Maven, и мне нужно установить переменную окружения, чтобы мой проект работал.
В Eclipse я перехожу к "Run → Run configurations", и под вкладкой "environment" я установил "WSNSHELL_HOME" в значение "conf".
Как я могу сделать это с Maven?
Большое спасибо!
Ответы
Ответ 1
Вы можете просто передать его в командной строке, так как
mvn -DmyVariable=someValue install
[Обновить] Обратите внимание, что порядок параметров значителен - вам нужно указать какие-либо параметры перед командами. [/Update]
В файле POM вы можете ссылаться на системные переменные (указанные в командной строке или в pom) как ${myVariable}
и переменные среды как ${env.myVariable}
. (Спасибо комментаторам за исправление.)
Update2
ОК, поэтому вы хотите передать свою системную переменную в свои тесты. Если, как я полагаю, вы используете плагин Surefire для тестирования, лучше всего указать необходимые системные переменные в pom, в ваш раздел 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>
Ответ 2
Свойства -D
не будут достоверно распространяться от верного подключения к вашему тесту (я не знаю, почему это работает с затмением). При использовании maven в командной строке используйте свойство argLine, чтобы обернуть ваше свойство. Это передаст их на ваш тест
mvn -DargLine="-DWSNSHELL_HOME=conf" test
Используйте System.getProperty
, чтобы прочитать значение в вашем коде. Посмотрите этот пост о разнице System.getenv
и Sytem.getProperty
.
Ответ 3
Существует плагин maven properties-maven-plugin, который обеспечивает цель set-system-properties
для установки системных переменных. Это особенно полезно, если у вас есть файл, содержащий все эти свойства. Таким образом, вы можете прочитать файл свойств и установить их как системную переменную.
Ответ 4
Вы можете заключить команду maven в скрипт bash:
#!/bin/bash
export YOUR_VAR=thevalue
mvn test
unset YOUR_VAR
Ответ 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#environmentVariables
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
...
<configuration>
<includes>
...
</includes>
<environmentVariables>
<WSNSHELL_HOME>conf</WSNSHELL_HOME>
</environmentVariables>
</configuration>
</plugin>
Ответ 6
Другим решением было бы установить MAVEN_OPTS
(или другие переменные среды) в ${user.home}/.mavenrc
(или %HOME%\mavenrc_pre.bat
на окнах).
Так как Maven 3.3.1 есть новые возможности для установки параметров командной строки mvn, если это то, что вы действительно хотите:
-
${maven.projectBasedir}/.mvn/maven.config
-
${maven.projectBasedir}/.mvn/jvm.config
Ответ 7
в вашем коде добавьте:
System.getProperty("WSNSHELL_HOME")
Измените или добавьте значение свойства из команды maven:
mvn clean test -DargLine=-DWSNSHELL_HOME=yourvalue
Если вы хотите запустить его в Eclipse, добавьте аргументы виртуальной машины в конфигурацию Debug/Run
- Перейти в "Выполнить" → "Выполнить настройки"
- Выберите вкладку Аргументы
- Добавить в раздел VM Arguments
-DWSNSHELL_HOME=yourvalue
![See image example]()
вам не нужно изменять POM