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

标签 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

最佳答案

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

sysProp2=bar with spaces

如果您不能(或不愿)直接修改该文件,您可以将其复制到另一个位置,编辑副本,然后通过

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

JAVA_OPTS 中,让它从那里加载您的属性。

关于java - 通过 JAVA_OPTS 将包含空格的系统属性传递给 Tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18358660/

相关文章:

java - 恢复除法算法的实现

java - 在 persist() 之后、flush() 之前更改 JPA 实体不起作用

bash - tee 命令创建空文件

bash - 为什么通配符在 `sudo rm` 语句中不起作用?

java - 向另一个类显示文本

java - 将字节写入文件而不删除现有字节

bash - 在 upstart .conf 脚本中运行 bash 脚本

bash - 如何在 bash 中组合 getopts 和位置参数?

linux - Bash - 检查字符串是否以预定义字符串(子字符串)开头

shell - 如何切割csv列