Mavenで環境変数


86

プロジェクトをEclipseからMavenに移植しましたが、プロジェクトを機能させるには環境変数を設定する必要があります。

Eclipseで、「実行」->「構成の実行」に移動し、「環境」タブで「WSNSHELL_HOME」を値「conf」に設定します。

Mavenでこれを行うにはどうすればよいですか?

どうもありがとうございました!


環境変数なしでプロジェクトを実行することをお勧めします。そして、Mavenに移動します。
khmarbaise 2011

3
システムに役立つ場合は環境変数の使用をスキップする理由はなく、自分のソリューションが機能すると確信しています(私は自分で使用しています)。'System.getenv' /'System.getProperty 'に関する私のヒントを参照してください。
frVaBe 2011

回答:


120

次のように、コマンドラインで渡すことができます。

mvn -DmyVariable=someValue install

[更新]パラメータの順序が重要であることに注意してください。コマンドのにオプションを指定する必要があります。[/更新]

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>

'mvn test'を起動する必要がありますが、機能しないようです。mvntest-DWSNSHELL_HOME = confと書くと、例外java.io.FileNotFoundException:null / wsnshell.conf(そのようなファイルまたはディレクトリはありません)が発生します。
Gianluca 2011

2
@Janky、逆に試してみてくださいmvn -DWSNSHELL_HOME=conf test
ペーテルTörök

いいえ... :(まだjava.io.FileNotFoundException:null / wsnshell.conf(そのようなファイルまたはディレクトリはありません)...コードでこの方法で変数を読み取ります..System.getenv("WSNSHELL_HOME");それは正しいですか?
Gianluca

@Janky、ちょっと待って、Mavenビルドから直接アプリを実行しますか?それとも...?
ペーテルTörök

43
2人は、環境変数とシステムプロパティを混同しています。-Dコマンドオプションは、システムプロパティのみを設定します。
Wouter Lievens 2014年

25

-Dプロパティが確実な-plugingテストへの信頼性が伝播されることはありません(それは日食で動作する理由を私は知りません)。コマンドラインでmavenを使用する場合は、argLineプロパティを使用してプロパティをラップします。これはあなたのテストにそれらを渡します

mvn -DargLine="-DWSNSHELL_HOME=conf" test

System.getPropertyコード内の値を読み取るために使用します。との違いについては、この投稿をご覧ください。System.getenvSytem.getProperty


2
System.getenvを使用する代わりに、System.getProperty( "WSNSHELL_HOME")を使用してプロパティを読み取る必要があります。
frVaBe 2011

完璧です。他のことを試すのに多くの時間を費やした後、これは私のために働きました。
ブーシャン2014

pom.xmlでsurefireプラグインのargLineパラメーターを構成した場合は、${argLine}プレースホルダーを追加します。そうしないと、コマンドラインからパラメーターが取得されません。例:<argLine>-Duser.timezone=UTC ${argLine}</argLine>
sorrymissjackson

これは私のために働いた、ありがとう!Mavenテスト用にsys-propsを構成するための優れたツールです。それでも一見すると、それを直接使用できない理由は非常に混乱していますが、追加の引数が必要です。
ファイ

9

mavenコマンドをbashスクリプトでラップできます。

#!/bin/bash

export YOUR_VAR=thevalue
mvn test
unset YOUR_VAR

信じられないことに、これはSurefireプラグインを使用して完全に機能した唯一の方法です。POMに設定した10個ほどのenv変数のうち、2つはテストの実行時に表示されません。シェルにセットしてから、mvn installどういうわけか隠されています。ただし、シェルスクリプトから実行すると、正常に機能します。なぜこれが起こるのか理解できたらいいのにと思います。
ピート

これが最も簡単な解決策であるため、これは受け入れられる答えであると私は信じています
wtsiamruk

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

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    ...
    <configuration>
        <includes>
            ...
        </includes>
        <environmentVariables>
            <WSNSHELL_HOME>conf</WSNSHELL_HOME>
        </environmentVariables>
    </configuration>
</plugin>

4

properties-maven- pluginと呼ばれるmavenプラグインがありset-system-propertiesます。これはシステム変数を設定するための目標を提供します。これは、これらすべてのプロパティを含むファイルがある場合に特に便利です。したがって、プロパティファイルを読み取り、それらをシステム変数として設定することができます。



1

コードに次を追加します。

System.getProperty("WSNSHELL_HOME")

mavenコマンドからvalueプロパティを変更または追加します。

mvn clean test -DargLine=-DWSNSHELL_HOME=yourvalue

Eclipseで実行する場合は、デバッグ/実行構成にVM引数を追加します

  • [実行]-> [構成の実行]に移動します
  • タブ引数を選択
  • セクションVM引数に追加

-DWSNSHELL_HOME = yourvalue

画像の例を見る

POMを変更する必要はありません


0

@Kevinの回答からのドキュメントに従って、以下のドキュメントは、mavenのsure-fireプラグインで環境変数を設定するために私のために働きました

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
    <environmentVariables>
        <WSNSHELL_HOME>conf</WSNSHELL_HOME>
    </environmentVariables>
</configuration>

0

いくつかの引数を_JAVA_OPTIONS変数に渡すことができます。

たとえば、次のようにMavenプロキシフラグの変数を定義します。

_JAVA_OPTIONS="-Dhttp.proxyHost=$http_proxy_host -Dhttp.proxyPort=$http_proxy_port -Dhttps.proxyHost=$https_proxy_host -Dhttps.proxyPort=$http_proxy_port"

次に、を使用しますmvn clean install(自動的に取得されます_JAVA_OPTIONS)。

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