Java命令行中的嵌套系统属性

时间:2012-10-30 13:23:06

标签: java command-line-arguments system-properties

有没有办法在Java命令行中嵌套系统属性?例如,指定类似的内容:

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

我的目标是在Eclipse中使用类似的东西进行Tomcat启动配置(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 个答案:

答案 0 :(得分: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);

你明白了......

答案 1 :(得分:2)

无法在Java中透明地实现扩展。但你可以这样做:

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

换句话说,在调用Java之前让shell进行扩展。 (Windows批处理文件中的语法会有所不同......但想法是一样的。)


顺便提一下,如果你运行这样的命令:

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

POSIX shell会将${workingDir}解释为shell变量扩展。如果没有定义workingDir变量,则会扩展为空...所以您需要使用引号将${workingDir}转换为实际的Java属性值; e.g。

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