1

Java のバージョンを以下に示します。

$ java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.5) (6b24-1.11.5-0ubuntu1~12.04.1)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

次のようにプロパティを渡す場合:

java -Dmy.property=value -jar my.jar

..コードで解決できません:

System.getProperty("my.property") // => null

ただし、ドットの代わりにアンダースコアを使用すると問題なく動作します。

// CLI
java -Dmy_property=value -jar my.jar
// In the code:
System.getProperty("my_property") // => "value"

これは非標準的な動作ではありませんか?

関連する場合、JAR は Maven を介してビルドされており、maven-assembly-plugin依存関係を JAR にバンドルするために使用されています。

4

2 に答える 2

0

Java は、プロパティ名をそのように設定すると、プロパティ名でドットをサポートします。

いくつかの可能な説明:

  • 実際に実行されるコマンドはそれとは異なります。起動スクリプトなどにバグがある可能性があります。(「set -x」を使用して、シェルに実際のコマンド オプションを教えてもらいます。)

  • あなたのアプリケーションの他の部分は、あなたが見ている呼び出しの前にその特定のプロパティを設定解除してgetPropertyいます。

于 2013-01-29T13:46:26.663 に答える
0

最初はjava -jar my.jar -Dmy.prop=value正しい形式ではなく、不適切な形式を使用していましたjava -Dmy.prop=value -jar my.jar。しかし、私はこれを早い段階で認識し、パラメーターの順序を修正しました。

しかし、編集していたモノリシックなコマンド チェーンを編集しているときに (このjava -jarコマンドをインラインで)、別の間違ったコマンド構造を誤って作成したことが判明しました: java -jar -Dmy.prop=value my.jar.

最初にアンダースコアを使用したときにコマンドが書き直されたため、この後者の不適切なパラメーター構造をうっかり修正してしまいました。

したがって、この話の教訓は次のとおりです。コマンド-jar my.jarの最後に正しいことを確認してくださいjava。いつも!

于 2013-01-29T13:44:05.570 に答える