如果没有命令行手动类路径更新,则无法执行shell脚本

时间:2012-07-20 17:43:35

标签: shell jar cron classpath

我希望这很简单,但我很难让它发挥作用。

我有一个java包,我想用shell脚本命令执行...

/jdk1.7.0/bin/java .path.to.classname.ClassToExecute >> /var/log/output.log

......基本上......

./SCRIPT_NAME

...应该从命令行运行上面的内容。

问题是每次从命令行开始都需要进行类路径更新,以使会话能够查看特定的JAR ......

export CLASSPATH=$CLASSPATH:/path/to/jar/file/lib/JAR_NAME.jar:.

如果我不首先放入这一行,那么shell脚本将不会执行与我需要手动添加的JAR相关的NoClassDefFoundError的抛出错误。

有人能告诉我在哪里需要编辑这个类路径更新,以便它始终可用于脚本以及cron,因为最终我想从cron调用它吗?

谢谢, ForestSDMC

2 个答案:

答案 0 :(得分:0)

您的shell脚本应如下所示。

#!/bin/bash
export CLASSPATH=$CLASSPATH:/path/to/jar/file/lib/JAR_NAME.jar:. 
/jdk1.7.0/bin/java .path.to.classname.ClassToExecute >> /var/log/output.log 

您还需要更改脚本的权限,以使其可执行

chmod 700 SCRIPT_NAME

700 =所有者只能执行脚本 770 =所有者和组成员可以运行该脚本 777 =有权访问服务器的每个人都可以运行该脚本。

注意到你想从cron运行它。您需要从crontab条目或脚本中获取.profile。

答案 1 :(得分:0)

刚刚找到答案并且工作正常,希望其他人会觉得这很有用......

您可以在shell脚本中动态生成classpath变量,然后将其作为属性应用于java命令行执行。像这样......

THE_CLASSPATH=
for i in `ls /path/to/the/JARS/lib/*.jar`
do
  THE_CLASSPATH=${THE_CLASSPATH}:${i}
done

/usr/bin/java -cp ".:${THE_CLASSPATH}" path.to.the.class.ClassName >> /var/log/logfile.log