Javaで-Dパラメーターを渡す場合、コマンドラインを記述してコードからアクセスする適切な方法は何ですか?
たとえば、私はこのようなものを書いてみました...
if (System.getProperty("test").equalsIgnoreCase("true"))
{
//Do something
}
そして、このように呼び出す...
Java -jar myApplication.jar -Dtest="true"
しかし、NullPointerExceptionを受け取ります。何が間違っていますか?
問題は、 "-D" after the -jar
を指定したことだと思われます。これを試して:
Java -Dtest="true" -jar myApplication.jar
コマンドラインヘルプから:
Java [-options] -jar jarfile [args...]
言い換えると、現時点では、-Dtest="true"
をJVM引数としてではなく、main
に渡す引数の1つとして扱います。
(おそらく()引用符を削除する必要がありますが、とにかくうまくいくかもしれません-おそらくシェルに依存します。)
それは次のとおりです。
Java -Dtest="true" -jar myApplication.jar
次に、以下が値を返します。
System.getProperty("test");
ただし、値はnull
になる可能性があるため、Boolean
を使用して例外から保護してください。
boolean b = Boolean.parseBoolean( System.getProperty( "test" ) );
getBoolean
メソッドはシステムプロパティ値を委任し、コードを次のように簡略化することに注意してください。
if( Boolean.getBoolean( "test" ) ) {
// ...
}
Javaではなくプログラムにパラメーターを与えています。つかいます
Java -Dtest="true" -jar myApplication.jar
代わりに。
使用を検討する
"true".equalsIgnoreCase(System.getProperty("test"))
nPEを回避します。しかし、「Yoda conditions」を常に考えずに使用しないでください。NPEを投げることは正しい動作であり、
System.getProperty("test") == null || System.getProperty("test").equalsIgnoreCase("true")
正しい(デフォルトのtrueを提供)。より短い可能性は
!"false".equalsIgnoreCase(System.getProperty("test"))
ただし、二重否定を使用しなくても誤解しにくくなりません。