【发布时间】:2013-12-17 17:09:08
【问题描述】:
我在 Linux 上的 Windows/shell 脚本上有一个 .bat 文件,它从命令行启动一个大型 Java 应用程序。它配置类路径、环境变量等。
在某一时刻,它使用RMID 来配置一堆服务,这些服务将在它们自己的 JVM 中运行。问题是它不允许我为 Linux 上的代码库属性指定多个 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 脚本本身就可以正常工作,但是再指定一个 JAR,我就会遇到一般故障。关于我做错了什么有什么建议吗?我愿意尝试新的东西来解决这个问题,因为到目前为止我的所有尝试都没有结果。
【问题讨论】:
-
定义“一般故障”。为什么是双双引号?为什么所有的 RMId 选项?您在注册可激活对象时指定那些,在您启动它时指定机器人。
-
一般故障,我的意思是它导致可激活对象无法注册,因此无法启动。双引号是一种 Linux 约定,仅在定义变量时解释特殊字符,如本文所述 (serverwatch.com/tutorials/article.php/3898896/…)。我对 Linux 不够熟悉,不知道它们是否不适合这种情况。如果您认为这可能是一个问题,我愿意改变。我得到的具体错误是
rmid: illegal option: file://home/jar2.jar(对不起,我以为我把它放在上面了) -
'General' 没有任何意义。 “失败”是指异常或错误消息。你应该把它贴在这里,在你的问题中。