2009-09-22 7 views
18

Estoy desarrollando una aplicación J2EE que se ejecuta en JBoss en una máquina con Windows Vista, pero la aplicación terminará en una máquina Linux. ¿Hay alguna manera de pasar el valor de una variable de entorno de una manera independiente de la plataforma?Pasar variables de entorno a una JVM, de manera independiente de la plataforma

creo (pero no estoy seguro) de la manera plataforma sensible sería:

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

y desde allí me acceder al valor (en Java) usando

System.getProperty("MY_ENV_VAR"); 

- ¿Es eso correcto?

El Javadoc para System.getenv(String name) parece implicar que el método depende de la plataforma, pero no lo tengo claro. ¿Podría omitir pasar por completo la variable a la JVM y usar getenv() después de usar estableciendo el valor para una variable de entorno utilizando el sistema operativo?

+1

¿Es incorrecto su ejemplo? ¿No debería ser -DMY_ENV_VAR si va a usar System.getProperty ("MY_ENV_VAR"); –

Respuesta

19

System.getenv() es independiente de la plataforma por sí mismo. Usando su ejemplo anterior, puede escribir

String value = System.getenv("MY_ENV_VAR") 

y funcionará tanto en Linux como en Windows. No hay razón para envolver esto en la propiedad del sistema java. Dicho esto, la parte "dependiente de la plataforma" de getenv() radica en el hecho de que diferentes sistemas operativos usan diferentes variables de entorno, como PATH en Windows vs path en Linux. Pero mientras use sus propias variables y las nombre constantemente (siempre mayúsculas, por ejemplo), estará bien.

+0

Maldita sea, pásame la respuesta :) –

+0

Entonces, si uso 'System.getEnv()', ¿no tengo que pasar nada a la JVM? –

+0

Esto es solo para leer variables de entorno. Sí, aún tienes que configurarlos. –

1

Cómo interpreto the java tutorial on this es que getenv funciona de una manera independiente de la plataforma, pero debe tener en cuenta que las variables no tienen un nombre uniforme en todas las plataformas. Como pareces configurar la var por ti mismo, esto no se aplica a ti.

0

Sí - getEnv() simplemente devolverá el nombre de la variable de entorno, y puede configurarlo de la manera que sea apropiada para la plataforma en la que se ejecuta (normalmente a través de un archivo de ejecución por lotes en Win32). Es una buena práctica recurrir a los valores predeterminados razonables basados ​​en la plataforma (inspeccionando System.getProperty("os.name")), si es posible, quiere evitar que los usuarios se molesten con la necesidad de meterse con variables ambientales para ejecutar su software.

Cuestiones relacionadas