通过JAVA_OPTS将包含空格的系统属性传递给Tomcat

时间:2013-08-21 13:23:34

标签: java bash shell tomcat tomcat6

我需要通过JAVA_OPTS环境变量将多个系统属性传递给Tomcat 6。我似乎无法传递包含空格的系统属性:

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

失败:

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.   

我环顾四周,答案似乎没什么帮助。尝试了所有这些并没有成功:

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

2 个答案:

答案 0 :(得分:3)

作为替代方案,您可以将属性设置放入conf/catalina.properties,而不是使用JAVA_OPTS。这是一个标准的java.util.Properties格式文件,因此您不需要引用任何内容,它只需将第一个等号前面的所有内容,冒号或空格作为属性名称,然后将所有内容作为值:

sysProp2=bar with spaces

如果您不能(或不愿意)直接修改该文件,您可以将其复制到其他位置,编辑副本,然后传递

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

使其从那里加载您的属性。

答案 1 :(得分:0)

好的。感谢您提供实际脚本的链接。 以下是catalina.sh的作用:

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

无论你做什么,它都将被空间分割。如果不更改catalina.sh文件,则无法解决此问题。

此页面详细回答了问题:http://mywiki.wooledge.org/BashFAQ/050