传递带有空格的Jvm属性(通过-D)

10

我有一个Docker应用程序,从命令行内运行Java jar。我已经设置了Docker容器以传递“其他Java选项”,在这种情况下,我想传递以下内容:

jdk.certpath.disabledAlgorithms=MD2, MD5, RSA keySize < 128, DSA keySize < 128, EC keySize < 128

我希望能够通过 -Djdk.etc 参数传递它,但是空格似乎真的会造成麻烦。有了空格,Java 会抱怨不知道如何处理 MD5 和后面的错误消息("Error: Could not find or load main class MD5,")。没有空格,我会得到关于 keySize< 是未知主类的错误。
请问有人能帮我正确地传递此参数吗?我已尝试将整个内容用引号括起来,但结果仍然相同。

1
你尝试过这个吗?https://dev59.com/nV3Va4cB1Zd3GeqPA3go - mariusz2108
https://stackoverflow.com/a/25551755/7605325 - user7605325
我在 Stack Overflow 上仔细查找了与我的问题类似的内容。抱歉!我将 @talex 的答案和 mariusz2108 评论中的被采纳的答案都尝试了一下,现在看起来问题已经解决了。谢谢! - Kevin Milner
3个回答

9

您应该仅包含变量值-Dvar="a < b"对我有效。


我所有的-D属性都在一个UNIX变量中,我尝试使用 MY_OVERIDES="$MY_OVERIDES -Dvar="a < b" " 之后它不起作用了。当我回显$MY_OVERRIDES时,看起来还好。 这里该怎么办? - S Kr
尝试使用 MY_OVERIDES='$MY_OVERIDES -Dvar="a < b" ' - talex
那行不通,因为在单引号字符串中无法扩展MY_OVERIDES - Thomas Keller
此外,与Docker无关,但与Java及其糟糕的命令行解析有关:https://issues.jenkins-ci.org/browse/JENKINS-57271 - Thomas Keller

1

0
较新版本的Java(我不知道从什么时候开始,但至少在jdk17中可以工作)允许传递参数文件(使用“@”)来包含JVM选项,而不是直接添加JVM选项。
echo '-Djdk.certpath.disabledAlgorithms="MD2, MD5, RSA keySize < 128, DSA keySize < 128, EC keySize < 128"' > /opt/jvmargs

java @/opt/jvmargs -Dother=arg -cp '.' ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接