※当サイトの記事には、広告・プロモーションが含まれます。

java.exeのオプション-Dproperty=valueが分かり辛い

nazology.net

⇧ Oh, my gosh...

java.exeのオプション-Dproperty=valueが分かり辛い

バッチ処理に関わらずプロジェクトがjarファイルになっているような時に、java.exeでjarを実行することあるあるだと思うのですが、java.exeのオプションが分かり辛い。

docs.oracle.com

docs.oracle.com

-Dproperty=value
システム・プロパティの値を設定します。 property変数はプロパティの名前を表す空白なしの文字列です。 value変数はプロパティの値を表す文字列です。 valueが空白のある文字列の場合、それを引用符で囲みます(-Dfoo="foo bar"など)。

https://docs.oracle.com/javase/jp/17/docs/specs/man/java.html#overview-of-java-options

⇧ システム・プロパティはと言うと、

segakuin.com

システムプロパティは、Java仮想マシンが環境に合わせて自動的に設定されるものと、ユーザが任意に設定するものとがある。

Javaシステムプロパティとは? その一覧と設定・確認・取得のやり方

ユーザがシステムプロパティを設定するには、javaコマンドに-Dオプションを指定して実行する。

java -Dexample.home="/home" Example.class

Javaシステムプロパティとは? その一覧と設定・確認・取得のやり方

⇧ということで、

  1. Java仮想マシンが環境に合わせて自動的に設定
  2. ユーザが任意に設定

の区別が非常に分かり辛いんですね...

一応、

docs.oracle.com

OracleさんのAPIドキュメントに記載されてるものが、『1.Java仮想マシンが環境に合わせて自動的に設定』の全量と考えて良いんですかね?

『2.ユーザーが任意に設定』の場合に、設定したシステム・プロパティってどう活用するのかがいまいち曖昧なのよね...

stackoverflowによると、

stackoverflow.com

The -D sets property values the java program currently running has access to. It allows the programmer to set values that are needed for the program to run but the program doesn't know what those values are so the user has to set them. This can be as simple as setting a file path or a resource location to more complex things that change the behavior of the program.

Take the example below

String value = System.getProperty("foo");
System.out.println("My value is: " + value);

Then when you run the program such as:

java -Dfoo="bar" -jar MyProg.jar

you will see the output as:

My value is: bar

https://stackoverflow.com/questions/59366184/what-is-d-in-vm-arguments-what-it-indicates-why-we-have-to-specify-always-d-in

⇧ -Dproperty=valueの値はJava側でシステムプロパティとして取得する感じになるっぽいので、Java側でシステムプロパティを利用しているようなプログラムをしていないと意味が無いってことですかね。

あと、独自に追加したシステムプロパティなのか、Javaが標準で用意してるシステムプロパティなのか、混乱しそうだけど...

ちなみに、

java.exeのhelpで確認すると、

    -D<name>=<value>
                  システム・プロパティを設定する    

⇧ ってなってるから、-Dオプションが正式名称になるんかな?

Web上で閲覧できるドキュメントを再掲すると、

-Dproperty=value
システム・プロパティの値を設定します。 property変数はプロパティの名前を表す空白なしの文字列です。 value変数はプロパティの値を表す文字列です。 valueが空白のある文字列の場合、それを引用符で囲みます(-Dfoo="foo bar"など)。

https://docs.oracle.com/javase/jp/17/docs/specs/man/java.html#overview-of-java-options

⇧ となっており、統一性が無いから何とも言えん...

せめて公式のドキュメントは統一性を持たせて欲しい気がする...

毎度モヤモヤ感が半端ない...

今回はこのへんで。