2010-10-05 7 views
5

Bien, entonces estoy agregando un argumento a mis JAVA_OPCIONES según lo documentado here. Sin embargo, no está funcionando debido al espacio. Aquí está la línea que estoy utilizando en la secuencia de comandos shell de UNIX (al igual que la documentación especifica):JVM ¿Sintonización con JAVA_OPTIONS utilizando un espacio?

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

Pero estoy consiguiendo el error siguiente:

Exception in thread "main" java.lang.NoClassDefFoundError: 
"-Dcom/sun/jndi/ldap/connect/pool/protocol=plain 

puedo hacerlo fácilmente si lo hago protocol = plain O protocol = ssl, pero realmente necesito que sea "plain ssl".

¿Alguien puede ayudar?

+0

Esto se debe a las reglas originales de sustitución de la propiedad bash. Eche un vistazo a http://stackoverflow.com/a/12532581/603516 – Vadzim

Respuesta

0

En primer lugar ..... Estoy pensando que quien decidió que la opción debería incluir un espacio en blanco debería ser juzgada por la policía de Java :-).

Dicho esto ... como dijo, su problema es el espacio. La forma de deshacerse de esto es encerrarlo entre comillas. No he probado esto, pero puedo intentar cambiar a:

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

Me imaginé que alguien lo intentaría. Eso tampoco funciona con un error similar: Excepción en el hilo "principal" java.lang.NoClassDefFoundError: ssl "--- Ah, y que la policía de java sea la propia corte marcial: http://java.sun.com/products /jndi/tutorial/ldap/connect/config.html –

2

Las comillas dobles que encierran las opciones de línea de comandos, donde comillas dobles escapado rodean el valor de la propiedad que tiene un espacio parece funcionar.

$ 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 
+0

Parece que funciona, suponiendo que está definiendo correctamente JAVA_OPTIONS, es decir: tenga cuidado al copiar pegar, ya que las líneas de corte pueden ser complicadas. –

Cuestiones relacionadas