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では拡張を透過的に行う方法はありません...。しかし、あなたはこれを行うことができます:

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

つまり、Javaを呼び出す前に、シェルに拡張を実行させます。(Windowsバッチファイルの構文は異なります...しかし、考え方は同じです。)


ちなみに、次のようなコマンドを実行すると、次のようになります。

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

POSIXシェルは${workingDir}、シェル変数の拡張として解釈されます。変数が定義されていない場合、これは何にも拡張されません...したがって、実際のJavaプロパティ値workingDirを取得するには引用符を使用する必要があります。${workingDir}例えば

$ java -DworkingDir=/tmp -DconfigFile=\${workingDir}/someFile.config
于 2012-10-30T13:58:37.883 に答える
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 に答える