複数の-Dステートメントを使用するよりも、コマンドラインで複数のシステムプロパティをJavaプログラムに指定する簡単な方法はありますか?
これを回避しようとしています:
Java -jar -DNAME="myName" -DVERSION="1.0" -DLOCATION="home" program.jar
1つの-D
とその後に引用符で囲まれた文字列を使用している人の例を見たことがあると思いましたが、その例はもう見つかりません。
答えはNOです。誰かが次のようなものを設定する例を見たかもしれません:
-DArguments=a=1,b=2,c=3,d=4,e=cow
次に、アプリケーションはArguments
プロパティ文字列の値を解析して個々の値を取得します。 main
でキー値を取得できます(入力形式が保証されている場合):
String line = System.getProperty("Arguments");
if(line != null) {
String str[] = line.split(",");
for(int i=1;i<str.length;i++){
String arr[] = str[i].split("=");
System.out.println("Key = " + arr[0]);
System.out.println("Value = " + arr[1]);
}
}
また、-D
はメインクラスの前、またはJavaコマンドラインのjar
ファイルの前にある必要があります。例:Java -DArguments=a=1,b=2,c=3,d=4,e=cow MainClass
プロパティを引数として渡す代わりに、プロパティを保存するために.propertiesを使用できます。
Documentation には、そのようなことについて言及しているものは何もありません。
引用は次のとおりです。
-Dproperty = valueシステムプロパティ値を設定します。値がスペースを含む文字列の場合、文字列を二重引用符で囲む必要があります。
Java -Dfoo = "some string" SomeClass
Java_TOOL_OPTIONS
環境変数を使用してオプションを設定できる場合があります。 Rasbianでうまくいきました。 環境変数とシステムプロパティ を参照してください。
多くの環境では、必要なコマンドラインオプションを使用してアプリケーションを起動するために、コマンドラインに簡単にアクセスできません。
これは、組み込みVMを使用するアプリケーション(VMを起動するためにJava Native Interface(JNI)呼び出しAPIを使用することを意味する)または起動がスクリプトで深くネストされているアプリケーションでよく起こります。これらの環境では、Java_TOOL_OPTIONS環境変数はコマンドラインを拡張するのに役立ちます。
JNI_CreateJavaVM関数(JNI呼び出しAPI)でこの環境変数が設定されると、JNI_CreateJavaVM関数は環境変数の値をそのJavaVMInitArgs引数で提供されるオプションに追加します。
ただし、セキュリティ上の理由から、この環境変数の使用は無効になっている場合があります。
場合によっては、セキュリティ上の理由からこのオプションは無効になっています。たとえば、Oracle Solarisオペレーティングシステムでは、有効なユーザーまたはグループIDが実際のIDと異なる場合、このオプションは無効になります。
コマンドラインでの指定とJava_TOOL_OPTIONS
環境変数の使用の違いを示すこの例を参照してください。
必要なプロパティをシステムで設定する必要がある場合、-D以外のオプションはありませんが、アプリケーションのブートストラップ中にこれらのプロパティが必要な場合は、プロパティファイルを介してプロパティをロードするのが最適なオプションです。単一のプロパティのビルドを変更する必要はありません。