0

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

2 回答 2

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);

你明白了……

于 2012-10-30T13:41:33.847 回答
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 属性值;例如

$ java -DworkingDir=/tmp -DconfigFile=\${workingDir}/someFile.config
于 2012-10-30T13:58:37.883 回答