2013-08-21 76 views
6

我需要通過JAVA_OPTS環境變量將多個系統屬性傳遞給Tomcat 6。我似乎無法通過包含空格的系統屬性:通過JAVA_OPTS將包含空格的系統屬性傳遞給Tomcat

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. 

我看了看周圍的SO和答案似乎並沒有幫助:

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 

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

你能顯示cataline.sh腳本嗎?也許問題出在該腳本里 –

+1

catalina.sh是Tomcat的啓動腳本,所以我不想修改它。你可以在這裏看看它:http://svn.apache.org/repos/asf/tomcat/tc6.0.x/tags/TOMCAT_6_0_34/bin/catalina.sh – AlexBrand

+0

我擔心你的所有路徑在'/ root'下 - 我希望你不是以root用戶的身份運行Tomcat ... –

回答

3

作爲替代你可以把屬性設置成conf/catalina.properties而不是使用JAVA_OPTS。這是一個標準java.util.Properties格式的文件,所以你不需要任何引用,它只是發生的一切後首先,作爲價值等號,冒號或空間的屬性名稱和之前的一切:

sysProp2=bar with spaces 

如果你不能(或不希望)直接修改該文件,您可以將其複製到其他位置,編輯副本,然後通過

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

JAVA_OPTS使它從那裏加載性能。

+0

你可以給一個例子,在'catalina.properties'中寫什麼? –

+0

@ElliottB我已經添加了一些更多的細節 - 這是一個標準的屬性文件,因此不需要引用。 –

+0

我在catalina.properties中嘗試了以下行,但它沒有任何作用。我嘗試向該行添加垃圾,Tomcat似乎也忽略了它。 '-Djavax.sound.sampled.SourceDataLine =#Nvidia [plughw:0,0]' –

0

好的。感謝您提供實際腳本的鏈接。 這裏是catalina.sh做:

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

所以這將是空格,不管你做什麼分裂。如果不更改catalina.sh文件,則無法解決該問題。

本頁面詳細回答這個問題:http://mywiki.wooledge.org/BashFAQ/050

+0

你能詳細說明爲什麼它會被空格分割嗎? – AlexBrand

+0

因爲這是如何分詞工作在bash中。有一個原因,我添加了一個鏈接到bash faq。還提供了幾種解決方案。 –

相關問題