2009-09-22 28 views
18

我正在開發一個在Windows Vista計算機上運行在JBoss上的J2EE應用程序,但應用程序最終將在Linux機器上運行。有沒有辦法以獨立於平臺的方式傳遞環境變量的值?以獨立於平臺的方式將環境變量傳遞給JVM

我認爲(但我不知道)平臺敏感的方法是:使用

System.getProperty("MY_ENV_VAR"); 

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

,並從那裏我將訪問值(在Java中) - 那是對的嗎?

Javadoc System.getenv(String name)似乎暗示該方法是平臺相關的,但我不清楚這一點。我可以直接跳過將變量完全傳遞給JVM,並且在使用OS設置環境變量的值之後使用getenv()

+1

你的例子錯了嗎?如果你打算使用System.getProperty(「MY_ENV_VAR」),它不應該是-DMY_ENV_VAR; – 2016-02-16 19:55:20

回答

19

System.getenv()本身與平臺無關。使用你的上面的例子,你可以肯定地寫

String value = System.getenv("MY_ENV_VAR") 

它可以在Linux和Windows上工作。沒有理由將其包裝到java系統屬性中。也就是說,getenv()的「依賴於平臺」的部分在於不同的操作系統使用不同的環境變量,例如Linux上的windows vs path上的PATH。但只要你使用自己的變量並且一致地命名它們(例如總是大寫),你就會好起來的。

+0

該死的,打我回答:) – 2009-09-22 19:32:43

+0

所以,如果我使用'System.getEnv()'我不需要傳遞任何東西到JVM中? – 2009-09-22 19:40:50

+0

這只是爲了讀取環境變量。是的,你仍然需要設置它們。 – 2009-09-22 20:21:21

1

我如何解釋the java tutorial on this是getenv以獨立於平臺的方式工作,但是您必須記住變量不是跨平臺命名的。既然你似乎自己設置變種,這不適用於你。

0

是的 - getEnv()將返回環境變量的名稱,並且可以以適合您所運行平臺的任何方式(通常通過Win32上的啓動批處理文件)對其進行設置。最好回到基於平臺的合理默認值(通過檢查System.getProperty("os.name")),如果有可能您希望避免讓用戶煩惱需要混淆環境變量來運行軟件。

相關問題