2013-08-21 30 views
6

Muszę przekazać wiele właściwości systemu do Tomcat 6 za pomocą zmiennej środowiskowej JAVA_OPTS. I nie wydaje się, aby przekazać właściwości systemu, które zawierają spacje:Przekazywanie właściwości systemu zawierających spacje do Tomcat za pośrednictwem JAVA_OPTS

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

katastrofy z:

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. 

Rozejrzałem się na SO i odpowiedzi nie wydają się pomóc. Wypróbował wszystkie bez powodzenia:

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

Czy mógłbyś pokazać skrypt cataline.sh? Może problem tkwi w tym, że skrypt –

+1

catalina.sh jest skryptem startowym Tomcata, więc nie chciałbym go modyfikować. Możesz rzucić okiem na to tutaj: http://svn.apache.org/repos/asf/tomcat/tc6.0.x/tags/TOMCAT_6_0_34/bin/catalina.sh – AlexBrand

+0

Jestem zaniepokojony, że wszystkie twoje ścieżki są pod '/ root' - Mam nadzieję, że nie używasz Tomcat jako root'a ... –

Odpowiedz

3

Jako alternatywę można umieścić ustawienia właściwości do conf/catalina.properties zamiast korzystania JAVA_OPTS. Jest to standardowy format pliku java.util.Properties więc nie trzeba cytować niczego, po prostu bierze wszystko przed pierwszym znakiem równości, okrężnicy lub przestrzeni, jak nazwy właściwości i wszystko po tym jak wartość:

sysProp2=bar with spaces 

Jeśli nie można (lub woleliby nie) zmodyfikować ten plik bezpośrednio, można skopiować go do innej lokalizacji, edytować kopię, a następnie przekazać

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

w JAVA_OPTS aby załadować swoje właściwości stamtąd.

+0

możesz podać przykład dokładnie, co napisać w "catalina.properties"? –

+0

@ElliottB Dodałem trochę więcej szczegółów - jest to standardowy plik właściwości, więc nie trzeba cytować. –

+0

Próbowałem następujący wiersz w catalina.properties, ale nie ma żadnego efektu. Próbowałem też dodawać śmieci do linii i wydaje się, że Tomcat zignorował to. '-Djavax.sound.sampled.SourceDataLine = # Nvidia [plughw: 0,0]' –

0

W porządku. Dziękuję za podanie linku do faktycznego skryptu. Oto co catalina.sh robi:

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

Więc to ma być podzielona spacjami bez względu na to, co robisz. Nie można tego naprawić bez zmiany pliku catalina.sh.

Ta strona odpowiedzieć na pytanie w szczegółach: http://mywiki.wooledge.org/BashFAQ/050

+0

Czy mógłbyś wyjaśnić, dlaczego zostanie podzielona przez spacje, bez względu na wszystko? – AlexBrand

+0

Bo tak działa dzielenie słów w bashu. Jest powód, dla którego dodałem link do basha faq. Istnieje również kilka rozwiązań. –