Как передать переменную среды в POM.xml?

Я использую maven как инструмент сборки. Я установил переменную среды, называемую env. Как получить доступ к этому значению переменной среды в файле pom.xml?

Ответ 1

Посмотрите Руководство по свойствам Maven...

Как отметил Сешагири в комментариях, ${env.variable_name} сделает то, что вы хотите.

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

Ответ 2

Возможно, было бы безопаснее напрямую передавать переменные окружения в свойства системы maven. Например, скажем, в Linux вы хотите получить доступ к переменной среды MY_VARIABLE. Вы можете использовать системное свойство в вашем файле pom.

<properties>
    ...
    <!-- Default value for my.variable can be defined here -->
    <my.variable>foo</my.variable>
    ...
</properties>
...
<!-- Use my.variable -->
... ${my.variable} ...

Задайте значение свойства в командной строке maven:

mvn clean package -Dmy.variable=$MY_VARIABLE

Ответ 3

Кроме того, убедитесь, что ваша переменная состоит только из ВЕРХНЕЙ ЧАСТИ ПИСЬМА.... Я не знаю, почему (в документации ничего не сказано явный об этом, по крайней мере, ссылка, предоставленная @Andrew White), но если переменная является строчным словом (например, env.dummy), переменная всегда будет пустой или пустой...

Я боролся с этим как час, пока не решил попробовать ВЕРХНЕЙ ЧАСТИ ПЕРЕМЕН, и проблема решена.

Примеры переменных OK:

  • DUMMY
  • DUMMY_ONE
  • JBOSS_SERVER_PATH

( ПРИМЕЧАНИЕ: я использовал maven v3.0.5)

Надеюсь, что это может помочь кому-то....

Ответ 4

Нельзя ли использовать

<properties>
    <my.variable>${env.MY_VARIABLE}</my.variable>
</properties>

Ответ 5

Я боролся с тем же, запуская оболочку script, которая задавала переменные, а затем хотела использовать переменные в shared-pom. Цель состояла в том, чтобы переменные среды заменяли строки в файлах проекта, используя com.google.code.maven-replacer-plugin.

Использование ${env.foo} или ${env.foo} не помогло мне. Мейвен просто не нашел переменную. То, что работало, заключалось в передаче переменной в качестве параметра командной строки в Maven. Здесь настройка:

  • Задайте переменную в оболочке script. Если вы запускаете Maven в под-script, убедитесь, что переменная становится установленной, например. используя source ./maven_script.sh, чтобы вызвать его из родительского script.

  • В shared-pom создайте параметр командной строки, который захватывает переменную среды:

<plugin>
  ...
  <executions>
    <executions>
    ...
      <execution>
      ...
        <configuration>
          <param>${foo}</param> <!-- Note this is *not* ${env.foo} -->
        </configuration>
  1. В com.google.code.maven-replacer-plugin введите значение замены ${foo}.

  2. В моей оболочке script, которая вызывает maven, добавьте это в команду: -Dfoo=$foo