【发布时间】:2011-10-20 14:16:45
【问题描述】:
我有一个在特殊环境中运行其他程序的系统程序:
cset shield -e PROGRAM。现在要运行一个 java 程序,我输入了cset shield -e java PROGRAM,但这不起作用。原来我必须指定java的完整路径。但是,PATH 已设置,因此 java PROGRAM 可以单独使用。有没有更简单的方法来做到这一点?
另外,我的另一个java程序需要外部库并且可以自己运行。但是使用cset shield,我得到了NoClassDefFoundError,这意味着它找不到库。添加类路径参数 (-cp CLASSPATH) 会导致错误消息 "p" contains invalid characters: p。
在尝试了各种建议及其排列之后,我想到了一种行之有效的方法:cset shield --exec -- $(which java) -cp ./:<LIB_PATH>/DA_LIB.jar PROGRAM。但有了这个我得到UnsatisfiedLinkError: Library not found: DA_LIB
【问题讨论】:
-
“cset”程序运行其他程序的环境有什么特别之处?似乎它所做的任何更改都不利于 Java 的运行。它可能会清除 CLASSPATH 并可能损坏 PATH 甚至可能损坏 LD_LIBRARY_PATH。因此,您需要研究“cset”(手册页或源代码或两者兼而有之)以了解它的作用以及导致您焦虑的原因。
-
@Jonathan 该手册说:“请注意,如果您执行的命令带有选项,则使用传统的“--”标记将 cset 的选项与命令的选项分开。例如:
# cset shield --exec — ls -l此命令将在防护罩内执行“ls -l”。”但是,虽然这允许我运行像ls这样的常规程序,但运行 java 会给我带来No such file or directory错误。 -
@wmjdgla:正如@Jonathan Leffler 所指出的,
cset shield似乎改变了你的环境,特别是PATH和CLASSPATH,但也可能是你的当前目录。如果是这种情况,则将相对目录放在类路径中没有多大意义。例如,您在那里有./,这可能没有多大用处(因为当前目录将被更改)。我不知道<LIB_PATH>在你的情况下是什么,只要确保所有路径都是绝对的。
标签: java linux terminal command-line-arguments