2

Java アプリケーション内から VM 引数をプログラムで取得しようとしています。


いくつかの調査を行った後、完璧な解決策と思われるものに出会いました。

ManagementFactory.getRuntimeMXBean().getInputArguments();

ただし、引数の内容に空白文字が含まれている場合、引数は分割され、その空白文字までがリストに含まれます。

VM 引数の例-Xmx1024mb -javaagent:"C:/Users/Thompson Main/Documents/app.jar"では、次のリストが返されます。

[0] -> -Xmx1024mb
[1] -> -javaagent:C:/Users/Thompson
[2] -> Main/Documents/app.jar
[3] -> -Dfile.encoding=Cp1252

避けられないスペースが含まれているため、2 番目の VM 引数は省略されており、すべてのユーザーのファイル パスにスペース文字がないとは限りません。私の意見では、このバグにより ManagementFactory と RuntimeMXBean は役に立たなくなります。


さらに調査を行いましたが、Java 6 で VM 引数全体を取得するための代替の成功した方法を見つけることができませんでした (Java 7 で動作することを教えてくれた Jean-Philippe に感謝します)。

アプリケーション内から VM 引数を取得する別の方法は何ですか?

4

1 に答える 1

4

これは JDK のバグであり、JDK 7 で修正されました。RuntimeMXBean.getInputArguments() はスペースを含む引数を正しく処理しません

良い解決策: Java 7 にアップグレードします。

醜い解決策:パラメータを再構築しますが、ひどく寝ます:(

于 2012-07-03T22:40:33.780 に答える