2009-09-22 8 views
18

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

私は思う(私はよく分からない)プラットフォーム依存の方法は、次のようになります。

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

、そこから私は

System.getProperty("MY_ENV_VAR"); 

を使用(Javaで)値にアクセスします - あれは正しいですか?

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

+1

あなたの例は間違っていますか? System.getProperty( "MY_ENV_VAR");を使用する場合は、-DMY_ENV_VARにする必要はありません。 –

答えて

19

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

String value = System.getenv("MY_ENV_VAR") 

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

+0

くそー、私を答えに打つ:) –

+0

だから、 'System.getEnv()'を使うとJVMに何も渡す必要はないのですか? –

+0

これは環境変数を読み取るためのものです。はい、まだそれらを設定する必要があります。 –

1

私はthe java tutorial on thisをどのように解釈しますか?getenvはプラットフォームに依存しない方法で動作しますが、変数がプラットフォーム間で一貫して命名されていないことに注意してください。 varを自分で設定しているようだから、これはあなたには当てはまりません。

0

はい - getEnv()は環境変数の名前を返すだけで、実行しているプラ​​ットフォームに適した方法で(通常はWin32の起動バッチファイル経由で)設定できます。可能であれば、プラットフォームをベースとした賢明なデフォルトに陥ることをお勧めします(もしユーザがソフトウェアを実行するために環境変数を混乱させる必要がないようにしたい場合はSystem.getProperty("os.name")を調べてください)。

関連する問題