Подтвердить что ты не робот

Переменная среды с Maven

Я портировал проект из Eclipse в Maven, и мне нужно установить переменную окружения, чтобы мой проект работал.

В Eclipse я перехожу к "Run → Run configurations", и под вкладкой "environment" я установил "WSNSHELL_HOME" в значение "conf".

Как я могу сделать это с Maven?

Большое спасибо!

4b9b3361

Ответ 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