26

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

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

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

并从那里我将访问值(在Java中)使用

System.getProperty("MY_ENV_VAR");

- 那是对的吗?

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

4

3 回答 3

28

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

String value = System.getenv("MY_ENV_VAR")

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

于 2009-09-22T19:31:48.760 回答
1

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

于 2009-09-22T19:33:02.487 回答
1

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

于 2009-09-22T19:35:28.527 回答