【发布时间】:2016-05-06 22:45:54
【问题描述】:
我想在执行java -jar时使用环境变量作为JVM选项。
我要执行的命令:
java -XX:onOutOfMemory='echo test' -jar foo.jar
当我按原样运行上述命令时,jar 将运行。
(如果您没有 foo.jar,您将收到 Error: Unable to access jarfile foo.jar 错误。但这仍然意味着该选项被正确使用)。
但是当我创建一个包含 JVM 选项的环境变量,并使用该变量运行命令时。
OOM="-XX:onOutOfMemory='echo test'"
java $OOM -jar foo.jar
然后我得到以下错误:
Error: Could not find or load main class test'
java 命令似乎忽略了“echo test”周围的引号。
在寻找类似的问题on SO 和on other websites 之后,我尝试了使用引号的各种变体:
OOM="-XX:OnOutOfMemoryError=\"echo test\""
OOM='-XX:OnOutOfMemoryError="echo test"'
OOM=-XX:OnOutOfMemoryError="echo test"
但它们都会导致相同的错误。
An article from Oracle 涉及 JVM 选项,使用分号提及:
-XX:OnOutOfMemoryError="<cmd args>; <cmd args>"
但是分号的目的是分隔多个命令,而不是命令和参数。所以这并不能解决我的问题。
有人知道如何正确地将-XX:onOutOfMemory='echo test' 选项移动到环境变量中吗?
【问题讨论】:
-
“回声测试”并没有真正的目的。我以它为例。我要执行的实际命令是:'kill -9 %p'。
标签: java bash environment-variables jvm-arguments