有没有办法在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"`.
答案 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