26

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

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

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

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

System.getProperty("MY_ENV_VAR");

- あれは正しいですか?

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

4

3 に答える 3

28

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

String value = System.getenv("MY_ENV_VAR")

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

于 2009-09-22T19:31:48.760 に答える
1

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

于 2009-09-22T19:33:02.487 に答える
1

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

于 2009-09-22T19:35:28.527 に答える