2013-08-21 28 views
6

Devo passare più proprietà di sistema a Tomcat 6 tramite la variabile di ambiente JAVA_OPTS. Non riesco a passare le proprietà di sistema che contengono spazi:Passare le proprietà di sistema che contengono spazi a Tomcat tramite JAVA_OPTS

JRE_HOME=/root/jre1.6.0_34/ JAVA_OPTS="-DsysProp1=foo -DsysProp2=bar with spaces" ./catalina.sh run 

Fails con:

Using CATALINA_BASE: /root/apache-tomcat-6.0.37 
Using CATALINA_HOME: /root/apache-tomcat-6.0.37 
Using CATALINA_TMPDIR: /root/apache-tomcat-6.0.37/temp 
Using JRE_HOME:  /root/jre1.6.0_34/ 
Using CLASSPATH:  /root/apache-tomcat-6.0.37/bin/bootstrap.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: with 
Caused by: java.lang.ClassNotFoundException: with 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
Could not find the main class: with. Program will exit. 

mi sono guardato intorno su SO e le risposte non sembrano aiutare. Ho provato tutto questo senza successo:

JRE_HOME=/root/jre1.6.0_34/ JAVA_OPTS="-DsysProp1=foo -DsysProp2=\"bar with spaces\"" ./catalina.sh run 

JRE_HOME=/root/jre1.6.0_34/ JAVA_OPTS='-DsysProp1=foo -DsysProp2="bar with spaces"' ./catalina.sh run 

JRE_HOME=/root/jre1.6.0_34/ JAVA_OPTS='-DsysProp1=foo -DsysProp2=bar\ with\ spaces' ./catalina.sh run 
+1

Puoi mostrare lo script cataline.sh? Forse il problema è all'interno di quello script –

+1

catalina.sh è lo script di avvio di Tomcat, quindi non vorrei modificarlo. Puoi dare un'occhiata qui: http://svn.apache.org/repos/asf/tomcat/tc6.0.x/tags/TOMCAT_6_0_34/bin/catalina.sh – AlexBrand

+0

Sono preoccupato che tutti i tuoi percorsi siano sotto '/ root' - Spero tu non stia eseguendo Tomcat come utente root ... –

risposta

3

In alternativa si potrebbe mettere le impostazioni delle proprietà in conf/catalina.properties invece di utilizzare JAVA_OPTS. Si tratta di un file di formato java.util.Properties standard in modo che non è necessario citare nulla, ci vuole semplicemente tutto prima che il primo segno di uguale, colon o lo spazio come il nome della proprietà e tutto dopo che come valore:

sysProp2=bar with spaces 

Se non si può (o preferisce non) modificare direttamente il file, è possibile copiare in un'altra posizione, modificare la copia, e quindi passare

-Dcatalina.config=file:/path/to/copy/of/catalina.properties 

in JAVA_OPTS per renderlo caricare le vostre proprietà da lì.

+0

potresti dare un esempio di cosa scrivere esattamente in catalina.properties? –

+0

@ElliottB Ho aggiunto qualche dettaglio in più: si tratta di un file di proprietà standard, quindi non è necessario il preventivo. –

+0

Ho provato la seguente riga in catalina.properties ma non ha alcun effetto. Ho provato anche ad aggiungere spazzatura alla linea, e sembra essere ignorata da Tomcat. '-Djavax.sound.sampled.SourceDataLine = # Nvidia [plughw: 0,0]' –

0

OK. Grazie per aver fornito il link allo script vero e proprio. Ecco cosa catalina.sh fa:

exec "$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS # ... more stuff 

Così sta per essere raggruppati per spazi non importa quello che fai. Non c'è modo di risolverlo senza modificare il file catalina.sh.

Questa pagina rispondere alla domanda in dettaglio: http://mywiki.wooledge.org/BashFAQ/050

+0

Potresti approfondire il motivo per cui verrà diviso per spazi, non importa quale? – AlexBrand

+0

Perché è così che la suddivisione delle parole funziona in bash. C'è una ragione per cui ho aggiunto un link a bash faq. Esistono anche diverse soluzioni. –