2016-09-27 8 views
1

私が作成する-Dシステムプロパティを使用するJavaアプリケーションがあります。私はそれらのうちの1つが正しく翻訳されることに問題があります。JVMシステムプロパティ - 文字列リテラルとして扱う方法

私のテスト環境(ローカルホスト)で自分のローカルコンピュータ上で、私はIntelliJのアイデアIDEを使用してWindowsを実行していると私はそうのようなIDEを通じて-Dシステム・プロパティを入力します。

-Dproperty={\"prop1\":\"val1\",\"prop2\":\"val2\"} 

私は、二重のエスケープそれらは文字列リテラルから離れている必要があるため、引用符で囲みます。上記のプロパティは機能し、中括弧を含む値全体が文字列リテラルとして格納されます。

このアプリケーションをLinuxクラウド環境に導入すると問題が発生します。私は、アーキテクチャーの違いによってシステムプロパティーが正しく読み込まれないと考えています。 bashでは、すべての-DシステムプロパティーのプロセスIDを調べ、ps -fwwp [processId]コマンドを実行します。これは、このプロパティを使用して自分のアプリケーションの一部を引き起こしている

...

-Dproperty=prop1:val1 
-Dproperty=prop2:val2 
-Dproperty=prop3:val3 

など:私は上記のプロパティは、次のように見える小さな性質の束に分割されていることを確認します失敗します。私はエスケープメソッドの束をやってみました、それらのどれも働いていません。

どのように私は、文字列として値が扱われるような方法で、このシステムプロパティを逃れることができるリテラル{"prop1":"val1","prop2":"val2"}

答えて

1

バッシュは、のように、エスケープする中括弧が必要です。

-Dproperty=\{\"prop1\":\"val1\",\"prop2\":\"val2\"\} 

他オプションは、文字列全体を一重引用符で囲みます。 Bashは一重引用符で拡張することはありません:

-Dproperty='{"prop1":"val1","prop2":"val2"}' 

あなたのWindows環境との互換性を高めるオプションがわかりません。

+0

ありがとうございます!私たちのLinuxクラウド環境では、最初のオプションは機能しませんでした。それでも、それらをkey:valueのペアに分割します。 2番目のオプション(一重引用符で全体の値を囲む)は私のために働いた。 Linux環境にデプロイするときはいつでも、この特定のプロパティの値を変更することを覚えておく必要があります。 – bscott

関連する問題