web-dev-qa-db-ja.com

プラットフォームに依存しない方法で、JVMに環境変数を渡す

Windows VistaマシンのJBossで実行するJ2EEアプリケーションを開発していますが、アプリケーションはLinuxマシンで終了します。プラットフォームに依存しない方法で環境変数の値を渡す方法はありますか?

プラットフォームに依存する方法は次のようになると思います(ただし、よくわかりません)。

_-Denv_var=%MY_ENV_VAR% (Windows)
-Denv_var=$MY_ENV_VAR (Linux)
_

そこから私は(Javaで)値にアクセスします

_System.getProperty("MY_ENV_VAR");
_

- あれは正しいですか?

System.getenv(String name)のJavadocは、メソッドがプラットフォームに依存していることを示唆しているようですが、それについては明確ではありません。変数を完全にJVMに渡すのをスキップし、OSを使用して環境変数の値を設定した後にgetenv()を使用できますか?

24
Matt Ball

System.getenv() は、それ自体がプラットフォームに依存しません。上記の例を使用すると、最も確実に次のように書くことができます

_String value = System.getenv("MY_ENV_VAR")
_

linuxとWindowsの両方で動作します。これをJavaシステムプロパティにラップする理由はありません。つまり、getenv()の「プラットフォームに依存する」部分は、異なるオペレーティングシステムが異なる環境変数を使用するという事実にあります。 WindowsのPATHとLinuxのパスのようですが、独自の変数を使用し、それらに一貫性のある名前を付ける限り(常に大文字など)、問題はありません。

24
ChssPly76

どのように解釈するか the Javaこれに関するチュートリアル )は、getenvがプラットフォームに依存しない方法で機能することですが、変数はプラットフォーム間で一貫して名前が付けられていないことに注意する必要があります自分で変数を設定しているように見えるため、これは当てはまりません。

1

はい-getEnv()は環境変数の名前を返すだけであり、実行しているプラ​​ットフォームに適切な方法で設定できます(通常、Win32の起動バッチファイルを介して)。ソフトウェアを実行するためにユーザーが環境変数をいじる必要がないようにしたい場合は、(System.getProperty("os.name")を調べて)プラットフォームに基づいた適切なデフォルトにフォールバックすることをお勧めします。

1
Tim Gilbert