2009-09-22 6 views
18

Windows Vista 시스템에서 JBoss에서 실행되는 J2EE 응용 프로그램을 개발 중이지만 응용 프로그램은 Linux 컴퓨터에서 종료됩니다. 플랫폼 독립적 인 방식으로 환경 변수의 값을 전달하는 방법이 있습니까? 플랫폼에 맞는 방법이 될 것플랫폼 독립적 인 방식으로 JVM에 환경 변수 전달

나는 생각 (하지만 난 잘 모르겠어요) :

System.getProperty("MY_ENV_VAR"); 

를 사용

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

거기에서 내가 (자바) 값에 액세스 할 - 그 맞습니까?

System.getenv(String name)에 대한 Javadoc은이 방법이 플랫폼에 따라 다르다는 것을 의미하는 것으로 보이지만 분명하지 않습니다. 변수를 JVM으로 완전히 넘기지 않고 OS를 사용하여 환경 변수의 값을 설정 한 후에 getenv()을 사용할 수 있습니까?

+1

예가 잘못 되었습니까? System.getProperty ("MY_ENV_VAR");를 사용하려는 경우 -DMY_ENV_VAR이 아니어야합니다. –

답변

19

System.getenv()은 자체적으로 플랫폼에 독립적입니다. 위의 예를 사용하면 가장 확실하게 쓸 수 있습니다.

String value = System.getenv("MY_ENV_VAR") 

이며 Linux와 Windows에서 모두 작동합니다. 이것을 Java 시스템 프로퍼티에 랩 할 이유는 없습니다. 즉, getenv()의 "플랫폼 종속적 인"부분은 다른 운영 체제가 Windows의 PATH와 Linux의 경로와 같은 다른 환경 변수를 사용한다는 사실에 있습니다. 그러나 자신의 변수를 사용하고 일관되게 (대문자로 항상) 이름을 지정하는 한, 괜찮을 것입니다.

+0

젠장, 대답 해달라 : –

+0

그래서'System.getEnv()'를 사용하면 JVM에 아무것도 넘겨 줄 필요가 없다. –

+0

이것은 환경 변수를 읽기위한 것입니다. 그렇습니다. 그래도 설정해야합니다. –

1

어떻게 해석합니까? the java tutorial on this은 getenv가 플랫폼 독립적 인 방식으로 작동하지만 변수가 플랫폼간에 일관되게 이름이 지정되지 않는다는 점을 명심해야합니다. var를 직접 설정 한 것 같으므로이 내용은 적용되지 않습니다.

0

예 - getEnv()는 환경 변수의 이름 만 반환하며 실행중인 플랫폼에 적합한 방식으로 (일반적으로 Win32의 배치 배치 파일을 통해) 설정할 수 있습니다. 가능한 경우 사용자가 소프트웨어를 실행하기 위해 환경 변수를 혼란스럽게 할 필요가 없도록하려면 플랫폼을 기반으로 합리적인 기본값으로 돌아가는 것이 좋습니다 (System.getProperty("os.name") 검사).

관련 문제