2017-12-18 452 views
0

我有我的/etc/environment如下環境變量

APP="/opt/apps/" PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games" JAVA_HOME="/usr/lib/jvm/java-8-oracle"

我已經在我的機器上採購source /etc/environment。我能夠得到的輸出,當我在終端

鍵入echo $APP,但是當我把它從Java文件中

LOGGER.error("APP: " + System.getenv("APP")); LOGGER.error("PATH: " + System.getenv("PATH")); LOGGER.error("JAVA_HOME: " + System.getenv("JAVA_HOME"));

我得到的唯一路徑的輸出而不是其他2個ENV變量。

輸出

2017-12-18 07:22:10 ERROR JRWebService:127 - APP: null 2017-12-18 07:22:10 ERROR JRWebService:128 - PATH:/ usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 2017-12-18 07:22:10 ERROR JRWebService:129 - JAVA_HOME: null

請糾正我,我究竟做錯了

+0

檢查此System.getProperty(「JAVA_HOME」); –

+0

當您嘗試[教程](https://docs.oracle.com/javase/tutorial/essential/environment/env.html)中的EnvMap示例時,您會得到什麼? –

+1

即使PATH變量值不匹配。 –

回答

3

這聽起來像不導出APP和JAVA_HOME。使用unix shell,set(變量在當前shell中可見)和export(變量對所有子進程都可見)之間有區別。如果您只鍵入「X = Y」,則設置X,但不導出。 PATH大部分已經出口到某個地方。

您可以在控制檯中運行「export | grep APP」來測試。如果APP不顯示,那麼即使echo $APP工作得很好,該變量對於java或您運行的任何其他程序都不可見。

如果是這種情況,只需將「導出APP」添加到.profile或啓動Java應用程序的腳本(或測試,只需在啓動Java之前在控制檯上鍵入)。

+0

運行'export | grep APP'給出了以下結果'declare -x APP =「/ opt/apps /」'但是我仍然無法在JAVA中訪問它 –

+0

@Jay怎麼樣,從哪裏啓動java?我的意思是: - 你是從控制檯啓動它爲java YourClassName - 你是使用腳本運行它嗎 - 或者我們在談論一個作爲服務運行的web應用程序嗎? – Yaro

+0

我在tomcat服務器上部署了一個war文件。我的tomcat位於/ opt/tomcat。版本8. * –

0

你不應該源你的/ etc /環境。這不是讓變量進入你的過程的方式。/etc/environment文件不是一個腳本,所以它沒有任何意義。它只是一個設置列表,有點像屬性文件。

請參閱this瞭解更多詳情。

當您登錄時會被讀取。因此,要使變量可見,您應該註銷並返回。

+0

我已經重新啓動系統,但沒有任何效果。當我發出echo $ APP時,我得到輸出,但在java文件中無法訪問相同的變量 –