2017-12-18 445 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文件中无法访问相同的变量 –