使用空格进行JVM调优的JAVA_OPTIONS是什么?

5

好的,我正在按照这里的文档将参数添加到我的JAVA_OPTIONS中。然而,由于空格的原因它并没有起作用。以下是我在UNIX shell脚本中使用的行(就像文档所指定的一样):

JAVA_OPTIONS="-DFRAMEWORK_HOME=${app_home}/conf
          -Dcom.sun.xml.namespace.QName.useCompatibleSerialVersionUID=1.0
          \"-Dcom.sun.jndi.ldap.connect.pool.protocol=plain ssl\""

但是我遇到了以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: 
"-Dcom/sun/jndi/ldap/connect/pool/protocol=plain

如果我使用protocol = plain OR protocol = ssl,我可以轻松完成它,但我真的需要它是“plain ssl”。

有人能帮忙吗?


这是由于原始的bash属性替换规则。请查看http://stackoverflow.com/a/12532581/603516。 - Vadzim
2个回答

2

在命令行选项中使用双引号,对于属性值包含空格的情况,需要使用转义双引号来包含它似乎是有效的。

$ export JAVA_OPTIONS="-Dcom.sun.xml.namespace.QName.useCompatibleSerialVersionUID=1.0 \
-Dcom.sun.jndi.ldap.connect.pool.protocol=\"plain ssl\""

$ cat P.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;

public class P {
    public static void main(String[] args) {
        Enumeration<?> e = System.getProperties().propertyNames();
        List<String> list = new ArrayList<String>();
        while (e.hasMoreElements()) {
            list.add((String) e.nextElement());
        }
        Collections.sort(list);
        for (String key : list) {
            System.out.println(key + "=" + System.getProperty(key));
        }
    }
}

$ javac -d ~/classes P.java

$ java -classpath ~/classes $JAVA_OPTIONS P | grep com.sun.jndi.ldap.connect.pool.protocol
com.sun.jndi.ldap.connect.pool.protocol=plain ssl

这似乎有效。假设您正确定义了JAVA_OPTIONS,即:在复制粘贴时要小心,因为换行符可能会很棘手。 - Alejandro Diaz

0
首先...我有点认为决定该选项应包括空格的人应该被 Java 警察审判 :-)
话虽如此...正如你所说,你的问题是空格。解决方法是用引号将其括起来。我没有尝试过,但你可以试着将它改为:
JAVA_OPTIONS='-DFRAMEWORK_HOME=${app_home}/conf 
      -Dcom.sun.xml.namespace.QName.useCompatibleSerialVersionUID=1.0 
      -Dcom.sun.jndi.ldap.connect.pool.protocol=\"plain ssl\"'

我想到某个人会尝试那样做。但是会出现类似的错误: Exception in thread "main" java.lang.NoClassDefFoundError: ssl" --- 还有,让Java警察自行军事法庭审判:http://java.sun.com/products/jndi/tutorial/ldap/connect/config.html - Fran Fitzpatrick

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