2012-10-30 5 views
0

Java 명령 행에 시스템 특성을 중첩하는 방법이 있습니까? 예를 들어, 다음과 같이 지정합니다.Java 명령 행의 중첩 시스템 특성

java -DworkingDir=/tmp -DconfigFile=${workingDir}/someFile.config.

나는 (Tomcat이 SLF4J/Logback에 로그인 할 때 패치) 이클립스에서 톰캣 실행 구성을 위해 그 같은 것을 사용하는 것을 목표로 :

-Dcatalina.base="C:\data\workspaces\EclipseWorkspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0" 
-Dlogback.configurationFile="${catalina.base}\conf\logback.groovy"`. 

답변

2

Java에서 확장이 투명하게 발생하는 방법은 없습니다. 그러나 당신은 이것을 할 수 있습니다 :

$ workingDir=/tmp 
$ java -DworkingDir=${workingDir} -DconfigFile=${workingDir}/someFile.config. 

다른 말로하면, Java를 호출하기 전에 셸에서 확장 작업을 수행하십시오. (윈도우 배치 파일에서 구문은 다른 것 ...하지만 아이디어는 동일합니다.)


덧붙여,이 같은 명령을 실행하는 경우 :

$ java -DworkingDir=/tmp -DconfigFile=${workingDir}/someFile.config 

는 POSIX 쉘 것이다 쉘 변수 확장으로 ${workingDir}을 해석하십시오. workingDir 변수가 정의되지 않은 경우에는 아무 것도 확장하지 않으므로 ${workingDir}을 인용 부호로 묶어 실제 Java 속성 값으로 가져와야합니다. 예 :

$ java -DworkingDir=/tmp -DconfigFile=\${workingDir}/someFile.config 
+1

+1. 이것은 쉘의 bailiwick에 정면으로 내립니다. Asker가 분명히 Windows를 사용하고 있지만 (C : \'로 시작하는 경로를 기록해 둡니다), 배치 스크립트의 버전 변수 및 대체를 사용해야한다고 가정합니다. –

+0

트릭없이 자연스럽게 확장 할 수있는 방법이 없습니다. 내 예상 사용 (Eclipse 실행 구성 확장)에 대한 작동하지 않을 것이다. 답장을 보내 주셔서 감사합니다. Stephen C와 iccthedral 응답은 받아 들일 만하며 Tom Anderson의 의견은 적절합니다. – PomCompot

2

물론, 당신이 읽을 수 있는지 확인하고 올바르게 교체에 대한 있도록 예 : 당신은 아이디어를 얻을

java -DworkingDir="/tmp" -DconfigFile="${workingDir}/someFile.config"

Properties props = System.getProperties(); 
String wDir = props.getProperty("workingDir"); 
String configFile = props.getProperty("configFile").replace("${workingDir}", wDir); 
System.out.println(configFile); 

...