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

我正在开发一个在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 System.getenv(String name)似乎暗示该方法依赖于平台,但我不清楚。 我是否可以完全跳过将变量完全传递到JVM中,并在使用OS设置环境变量的值后使用getenv()

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

 String value = System.getenv("MY_ENV_VAR") 

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

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

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