【问题标题】:Windows batch & java: Combining -XX:OnOutOfMemoryError command and batch parametersWindows 批处理和 java:结合 -XX:OnOutOfMemoryError 命令和批处理参数
【发布时间】:2016-03-14 14:10:51
【问题描述】:

我对 Windows 批处理编程完全陌生。 我想要实现的是为Java应用程序编写一个启动脚本。然而,它并没有启动 Java 应用程序,而是打印出来

用法:java [-options] 类 [args...]

(执行一个类)

或java [-options] -jar jarfile [args...]

(执行jar文件)

...

表示我的参数没有被正确识别。


这是我的MCVE 用于不工作的脚本:

set memory=600000
java -XX:OnOutOfMemoryError="taskkill /PID %p" -Xmx%memory%K -jar MyApp.jar

在实际场景中,计算memory 以设置应用程序的最佳最大堆大小。


省略这两个参数之一会使应用程序启动。所以

java -XX:OnOutOfMemoryError="taskkill /PID %p" -jar MyApp.jar

set memory=600000
java -Xmx%memory%K -jar MyApp.jar

有效,但我需要两个参数才能在一次调用中工作。

【问题讨论】:

  • 尝试将@echo on/@echo off 放入您的脚本 (described here) 中,看看它在“两个参数”情况下实际执行的命令。
  • 感谢您的意见!使用@echo on导致打印java -XX:OnOutOfMemoryError="taskkill /PID memoryK -jar MyApp.jar,这表明"有错误,不再关闭,参数没有添加(%memory%)...
  • 看起来正在发生的事情是%p 中的% 被认为是替换的“开口”% - 我认为%% 是单个@987654337 的标记@(就像在printf-like 方法中一样)。

标签: java windows batch-file parameters


【解决方案1】:

如果您将@echo on@echo off 放入您的脚本中,您可以看到实际正在执行的命令。

你说生成的命令是:

java -XX:OnOutOfMemoryError="taskkill /PID memoryK -jar MyApp.jar

这使得 %p% 看起来被视为替换的“开口”%

除了不平衡的引号之外,这意味着您实际上没有给java 运行命令--jar MyApp.jar 实际上在-XX:OnOutOfMemoryError 字符串中。

尝试用%% 替换单个% - 根据this question,这就是如何在BAT 文件中编写文字%

java -XX:OnOutOfMemoryError="taskkill /PID %%p" -Xmx%memory%K -jar MyApp.jar

【讨论】:

  • 我刚刚写了评论,这样就解决了问题! OnOutOfMemoryError 参数中的第一个% 必须使用%% 进行转义。谢谢!
  • 没问题。请考虑接受答案:)
  • 不,我不会!开个玩笑,我只需要等几分钟才能做到这一点:P
猜你喜欢
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多