2013-08-21 6 views
6

muss ich mehrere Systemeigenschaften zu Tomcat 6 durch die Umgebungsvariable JAVA_OPTS passieren. Ich kann es nicht passieren Systemeigenschaften scheinen die Leerzeichen enthalten:Passingsystems Eigenschaften, die Räume zu Tomcat durch JAVA_OPTS enthält

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

schlägt mit:

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. 

Ich sah mich um auf SO und die Antworten scheinen nicht zu helfen. Versuchte alle diese mit keinem Erfolg:

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

Können Sie cataline.sh-Skript anzeigen? Vielleicht ist das Problem in diesem Skript –

+1

catalina.sh ist Tomcat's Startskript, also würde ich es nicht ändern wollen. Sie können hier einen Blick an ihm nehmen: http://svn.apache.org/repos/asf/tomcat/tc6.0.x/tags/TOMCAT_6_0_34/bin/catalina.sh – AlexBrand

+0

Ich bin besorgt über alle Wege zu sein unter '/ root' - ich hoffe, Sie sind nicht Tomcat als Benutzer root läuft ... –

Antwort

3

Als Alternative Sie die Eigenschaftseinstellungen in conf/catalina.properties statt mit JAVA_OPTS setzen könnten. Dies ist ein Standard java.util.Properties Format-Datei, so dass Sie brauchen, um alles nicht zu zitieren, dauert es einfach alles, bevor das erste Zeichen, Kolon oder Raum als Eigenschaftsnamen und alles, was danach als Wert ist gleich:

sysProp2=bar with spaces 

Wenn Sie können die Datei nicht direkt ändern (oder nicht bevorzugen), können Sie es an eine andere Stelle kopieren, bearbeiten Sie die Kopie, und dann

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

in JAVA_OPTS passieren, um es von dort Ihre Eigenschaften zu machen zu laden.

+0

könnten Sie ein Beispiel geben, was genau in 'catalina.properties' geschrieben werden soll? –

+0

@ElliottB Ich habe einige weitere Details hinzugefügt - es ist eine Standard-Eigenschaft-Datei, so dass keine Zitate erforderlich sind. –

+0

Ich habe versucht, die folgende Zeile in catalina.properties, aber es hat keine Auswirkungen. Ich habe versucht, der Zeile auch Müll hinzuzufügen, und Tomcat scheint das ignoriert zu haben. '-Djavax.sound.sampled.SourceDataLine = # Nvidia [plughw: 0,0]' –

0

in Ordnung. Vielen Dank für die Bereitstellung des Links zum eigentlichen Skript. Hier ist, was catalina.sh tut:

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

So wird es gehen durch Leerzeichen aufgeteilt werden, egal was Sie tun. Es gibt keine Möglichkeit, das zu beheben, ohne die Datei catalina.sh zu ändern.

Diese Seite die Frage im Detail beantworten: http://mywiki.wooledge.org/BashFAQ/050

+0

Könnten Sie näher erläutern, warum es durch Leerzeichen gespalten wird, egal was passiert? – AlexBrand

+0

Denn so funktioniert Worttrennung in bash. Es gibt einen Grund, warum ich einen Link zu bash faq hinzugefügt habe. Es gibt auch verschiedene Lösungen. –

Verwandte Themen