передать параметр Java из Maven - PullRequest
8 голосов
/ 08 марта 2012

Мне нужно выполнить некоторые тесты с maven и передать параметр из командной строки.

Мой код Java должен получить параметр как: System.getenv ("my_parameter1");

и я определяю параметр в файле pom.xml как пример ниже: (и последний, я бы изменил pom.xml, чтобы получить параметр из общей строки mvn clean install -Dmy_parameter1 = value1)

Но это не работает;System.getenv ("my_parameter1") возвращает ноль.как определить параметр в файле pom.xml?

pom.xml

<project>
  ...
  <profiles>
    <profile>
      <properties>
        <my_parameter1>value1</my_parameter1>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <executions>
              <execution>
                <id>slowTest</id>
                <phase>test</phase>
                <goals>
                  <goal>test</goal>
                </goals>
                <configuration>
                  <skip>false</skip>
                  <includes>
                    <include>**/*Test.java</include>
                    <include>**/*TestSlow.java</include>
                  </includes>
                  <properties>
                    <my_parameter1>value1</my_parameter1>
                  </properties>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>

Ответы [ 3 ]

17 голосов
/ 09 марта 2012

System.getenv () читает переменные окружения , например PATH.Вместо этого вам нужно прочитать системное свойство .-D [имя системного свойства] = [значение] предназначено для системных свойств, а не переменных среды.

У вас есть два варианта:

  1. Если вы хотите использовать средупеременных, используйте специфичный для ОС метод установки переменной среды my_parameter1 перед запуском Maven.В Windows используйте set my_parameter1=<value>, в 'nix используйте export my_parameter1=<value>.

  2. Вы можете использовать System.getProperty () , чтобы прочитать значение свойства системы изнутриваш код.

пример:

String param = System.getProperty("my_parameter1");

В вашей верной конфигурации плагина вы можете использовать:

<configuration>
    <systemPropertyVariables>
        <my_property1>${my_property1}</my_property1>
    </systemPropertyVariables>
</configuration>

, которая принимает свойство Maven_my_property1_ и устанавливает его также в ваших тестах.

Подробнее об этом здесь .

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

3 голосов
/ 08 марта 2012

Используйте

${env.my_parameter} 

для доступа к переменной окружения в pom.xml.

Вы можете использовать плагин справки, чтобы увидеть, какие переменные установлены с помощью

mvn help:system

Однако нормальное использование свойств тоже должно работать.В широком контексте, однако, мне интересно ... что вы хотите сделать?Там может быть более простое решение.

2 голосов
/ 08 марта 2012

Плагин maven surefire также имеет опцию для установки переменных среды , просто добавьте это в конфигурацию вашего плагина.

<environmentVariables>
    <my_parameter1>value</my_parameter1>
</environmentVariables>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...