我正在开发一个在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()
?
答案 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")
)来依赖合理的默认值,如果可能的话,您可能希望避免让用户因需要使用环境变量来运行软件而烦恼。