以与平台无关的方式将环境变量传递给JVM

时间:2009-09-22 19:20:09

标签: java jvm environment-variables platform-independence

我正在开发一个在Windows Vista机器上运行JBoss的J2EE应用程序,但该应用程序最终会在Linux机器上运行。有没有办法以独立于平台的方式传递环境变量的值?

我认为(但我不确定)平台敏感的方式是:

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

从那里我将使用

访问值(在Java中)
System.getProperty("MY_ENV_VAR");

- 这是正确的吗?

System.getenv(String name)的Javadoc似乎暗示该方法依赖于平台,但我不清楚这一点。我是否可以完全跳过将变量完全传递到JVM中,并在使用操作系统设置环境变量的值后使用getenv()

3 个答案:

答案 0 :(得分:24)

System.getenv()本身与平台无关。使用上面的例子,你肯定可以写

String value = System.getenv("MY_ENV_VAR")

它可以在Linux和Windows上运行。没有理由将其包装到java系统属性中。也就是说,getenv()的“平台相关”部分在于不同的操作系统使用不同的环境变量,例如Windows上的PATH和Linux上的路径。但只要你使用自己的变量并一致地命名它们(例如总是大写),你就没事了。

答案 1 :(得分:1)

我如何解释the java tutorial on this getenv是否以独立于平台的方式工作,但您必须记住,变量并非跨平台一致地命名。由于您似乎自己设置了var,因此这不适用于您。

答案 2 :(得分:0)

是 - getEnv()将只返回环境变量的名称,您可以以适合您正在运行的平台的任何方式设置它(通常通过Win32上的启动批处理文件)。最好是依靠平台(通过检查System.getProperty("os.name"))来依赖合理的默认值,如果可能的话,您可能希望避免让用户因需要使用环境变量来运行软件而烦恼。