POM.xmlで環境変数を参照するにはどうすればよいですか?


172

私はmavenをビルドツールとして使用しています。という環境変数を設定しましたenvpom.xmlファイル内のこの環境変数の値にアクセスするにはどうすればよいですか?


7
$ {env.XXXXXXXX}で参照できます。XXXXXXXXは変数名です。たとえば、$ {env.PATH}はPATH参照を提供します。
12

2
しかし、おそらくそうすべきではありません。ビルドを環境に依存させると、再現が難しくなります。
スティーブンC

5
@StephenC私は「すべきではない」とは言いませんが、「非常に注意してください」。CI環境とローカル開発環境は異なって見える場合があり、環境変数はギャップを埋める方法です。
アンドリューホワイト

1
私にとって、IntelliJ 2019は${env.XYZ}参照を赤で示しています。変数は実行時に正しく展開されますが、コンパイル時に赤で表示されます。したがって、私は最初に尋ねられたのと同じ質問をします。
djangofan

1
はい、@ MarkHanを実行します
djangofan

回答:


216

Mavenプロパティガイドを確認してください...

セシャギリがコメントで指摘したように、${env.VARIABLE_NAME}あなたがやりたいことをやります。

警告の言葉を追加してpom.xml、プロジェクトを完全に説明する必要があると言うので、環境変数は慎重に使用してください。ビルドを環境に依存させると、再現が難しくなります


3
また、ビルドプラットフォームとシステムに依存します。
lhunath

12
注意:pom内のvariable_nameのすべての文字は、プラットフォームに依存しないようにするために大文字でなければなりません。Windows OSで実行されている大文字の形式でのみ有効だからです。たとえば、m2_homeという名前の環境変数を定義した場合でも、$ {env.M2_HOME}は有効ですが、$ {env.m2_home}は無効です。
Jeff Liu

これはWindows環境のプロパティ(WL_HOME = c:\ apps \ Weblogic12 \ wlserver_12.1)にありますが、pomでは、この値c:\ apps \ Weblogic12 \ wlserver(without_12.1)を返します。これから?
Anand Rockzz 2015年

私は適切に<wl_home> $ {WL_HOME} </ wl_home>と呼ばれているものを定義していて、それを使用していて、どういうわけかバージョンなしで参照していることに気づきました。
Anand Rockzz 2015年

IDEおよびCLIのWindowsでは問題なく動作しています。以下のためのMacOS / Linuxの/ Unixのそれはのために間違いなくどこIDEからのサポートを得るためには少しトリッキーだターミナル、それが正常に動作しています。
Md Shahed Hossain 2017

29

環境変数を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

4
なぜこれがより安全なのですか?
weberjn 2018

これは私にとっては機能しません。コマンドラインで指定されたmy.variableの新しい値が<properties>ブロックの値をオーバーライドすることはありません。何か案は?
ダニエルスコット

安全性を高めるため、または少なくとも不可解なことですが、b / cプロパティはプロパティファイルで記述できます。ただし、私のソリューションはSpringフレームワークに依存していることを理解しています。これが、おそらくDanielで機能しない理由です。
EricGreg 2018

コマンドライン/環境を介して値の変更に失敗した場合でも、プロパティの値から有効なPOMおよびビルドであるため、より安全です。
foo

20

また、環境変数大文字の文字のみ構成されていることを確認してください。理由はわかりません(ドキュメントでは、それについて明示的に何も述べられていません。少なくとも、@ Andrew Whiteによって提供されたリンク)。変数は小文字の単語(例:env.dummy)で、変数は常に空またはnullになります...

大文字の変数を試すことにし、問題が解決するまで、1時間ほど苦労していました。

OK変数の例:

  • ダミー
  • DUMMY_ONE
  • JBOSS_SERVER_PATH

:私はmaven v3.0.5を使用していました)

これが誰かに役立つことを願っています...


5
UNIXの環境変数は大文字と小文字が区別され、伝統的に大文字の名前が付けられるため、シェルで設定された変数を見ると、シェルにローカルに設定されている変数と子プロセスに表示されている変数を簡単に区別できます。Windowsの環境変数では大文字と小文字が区別されないようですが、ドキュメントからは確認していません。コマンドプロンプトでの小さな実験からのみです。
2014年

11

使えない

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

それを明示的にしてデフォルトのプロパティ値をオーバーライドする-Dを使用して渡す場合とは対照的に、その暗黙的な設定は、ゼロ構成環境(devなど)のセットアップに依然として役立つ可能性があります
Technoshaft

1
これは機能しますか?私はそれを試してみましたが、少なくとも私の環境ではそうではありません
user26270

3

私は同じことで苦労していて、変数を設定するシェルスクリプトを実行してから、共有変数で変数を使用したいと考えていました。目標は、com.google.code.maven-replacer-pluginを使用して、プロジェクトファイルの文字列を環境変数で置き換えることでした。

使用している${env.foo}${env.FOO}、動作しませんでした。Mavenは変数を見つけていませんでした。うまくいったのは、変数をMavenのコマンドラインパラメーターとして渡すことでした。これが設定です:

  1. シェルスクリプトで変数を設定します。サブスクリプトでMavenを起動する場合は、変数が設定されていることを確認してください。たとえばsource ./maven_script.sh、親スクリプトからそれを呼び出すために使用します。

  2. shared-pomで、環境変数を取得するコマンドラインパラメーターを作成します。

<プラグイン>
  ...
  <実施>
    <実施>
    ...
      <実行>
      ...
        <構成>
          <param> $ {foo} </ param> <!-これは*ではありません* $ {env.foo}->
        </構成>
  1. com.google.code.maven-replacer-pluginで、置換値を作成します${foo}

  2. mavenを呼び出すシェルスクリプトで、これをコマンドに追加します。 -Dfoo=$foo


0

<properties>タグを使用してカスタム変数と${variable}それを使用するパターンを定義できます

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <!-- define -->
    <properties>
        <property.name>1.0</property.name>
    </properties>

    <!-- using -->
    <version>${property.name}</version>

</project>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.