我在Linux上的Windows / shell脚本上有一个.bat
文件,它从命令行启动一个大型Java应用程序。它配置类路径,环境变量等。
有一次,它使用RMID来配置一系列将在自己的JVM中运行的服务。问题是它不允许我为Linux上的codebase属性指定多个JAR。它允许我在Windows上这样做很好,但我认为.sh
脚本的语法/样式必定是错误的,我希望更有经验的Linux用户可以提供一些建议。在Windows上,工作线如下所示:
SET RMID_OPTIONS=%RMID_VM%
-J-DINSTALL_DIR=%CONFIG_PATH%
-C-DINSTALL_DIR=%CONFIG_PATH%
-J-DINSTALL_DIR_LOCAL=%HOME_DIR%
-C-DINSTALL_DIR_LOCAL=%HOME_DIR%
-J-Djava.security.policy=%PL_HOME%\windows\system.policy
-C-Djava.rmi.server.codebase=
"file:/%HOME_DIR%\jar1.jar file:/%HOME_DIR%\jar2.jar"
-J-Djava.rmi.server.codebase=
"file:/%HOME_DIR%\jar1.jar file:/%HOME_DIR%\jar2.jar"
// more stuff here
唯一重要的行是设置rmi.server.codebase
属性的行。以上工作100%正常,但是,当尝试在Linux中的代码库中设置多个JAR时,它会导致一般性故障并且不执行整个RMID命令。我的shell脚本如下所示:
export RMID_OPTIONS="${RMID_VM}
-J-DINSTALL_DIR=${CONFIG_PATH}
-C-DINSTALL_DIR=${CONFIG_PATH}
-J-DINSTALL_DIR_LOCAL=${HOME_DIR}
-C-DINSTALL_DIR_LOCAL=${HOME_DIR}
-J-Djava.security.policy=${PL_HOME}/linux/system.policy
-C-Djava.rmi.server.codebase=
""file:/${HOME_DIR}/jar1.jar file:/${PL_HOME_LOCAL}/jar2.jar""
-J-Djava.rmi.server.codebase=
""file:/${HOME_DIR}/jar1.jar file:/${PL_HOME_LOCAL}/jar2.jar""
// more stuff here
"
如果只指定了一个JAR,那么shell脚本本身就可以正常工作,但是我得到了一般失败。关于我做错的任何建议?我愿意尝试新事物来解决这个问题,因为到目前为止我的所有尝试都没有结果。
答案 0 :(得分:3)
在Linux下,转义引号的方式不同。您正在尝试使用Windows特定的语法,这将导致jar文件作为单独的参数传递,而不是单独的参数传递。
而不是""
在引号内生成引号,您必须在Linux中使用\"
:
export RMID_OPTIONS="... -C-Djava.rmi.server.codebase=\"file:/${HOME_DIR}/jar1.jar file:/${PL_HOME_LOCAL}/jar2.jar\" ..."
除此之外,我不确定file:/
语法是否正确。它可能是file://
或绝对文件路径,没有任何先于它,但你必须尝试它。
答案 1 :(得分:1)
你做错了。您根本不需要使用参数和系统属性启动rmid
。在您的激活设置程序中注册您要使用的ActivationGroup(s)
时,应指定所有这些内容。这反过来意味着所有命令行问题都应该消失。