【问题标题】:passing Jvm properties (via -D) that contain spaces传递包含空格的 Jvm 属性(通过 -D)
【发布时间】:2020-08-12 03:28:06
【问题描述】:

我有一个 docker 应用程序,它在命令行内部运行一个 java jar。我已将 docker 容器设置为通过“其他 java 选项”,在这种情况下,我想通过以下内容:

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

我希望能够通过 -Djdk.etc 传递它,但这些空间似乎真的把事情搞砸了。有了空格,java 抱怨它不知道如何处理 MD5 及更高版本(“错误:无法找到或加载主类 MD5”。没有空格,我会收到关于 keySize&lt; 是未知主类的错误。

有人可以帮助我以正确的方式传递这个参数吗?我试过用引号括住整个事情,但结果是一样的。

【问题讨论】:

标签: java jvm-arguments


【解决方案1】:

你应该只包围变量值-Dvar="a &lt; b" 对我有用。

【讨论】:

  • 我所有的 -D 属性都在一个 UNIX 变量中,我尝试使用 MY_OVERIDES="$MY_OVERIDES -Dvar=\"a
  • 试试MY_OVERIDES='$MY_OVERIDES -Dvar="a &lt; b" '
  • 那行不通,因为MY_OVERIDES 不会在单引号字符串中展开。
  • 另外,与 Docker 无关,但与 Java 及其糟糕的命令行解析有关:issues.jenkins-ci.org/browse/JENKINS-57271
【解决方案2】:

在这里找到更好的解释:http://mail.openjdk.java.net/pipermail/jmh-dev/2015-March/001768.html

建议的两个选项是。

$ java -jar benchmarks.jar -jvmArgs "-Dx=12 -Dy=\"one two\""
$ java -jar benchmarks.jar -jvmArgs "-Dx=12" -jvmArgs "-Dy=one two"

也用 Maven 尝试了第二个版本。它正在工作。

【讨论】:

    猜你喜欢
    • 2013-08-23
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多