使用unix通过crontab运行java类时ClassnotFoundException?

使用unix通过crontab运行java类时ClassnotFoundException?,java,shell,unix,crontab,Java,Shell,Unix,Crontab,我已经写了一个shell脚本,它有一个带有main方法的演示类 现在,当我使用/file.sh运行shell时,它工作得很好 但是现在我已经配置了一个cronjob,使用crontab每隔5分钟执行一次该文件 但这给了我一个classnotfoundException Exception in thread "main" java.lang.NoClassDefFoundError: com/example/Demo Caused by: java.lang.ClassNotFoundExcep

我已经写了一个shell脚本,它有一个带有main方法的演示类

现在,当我使用
/file.sh
运行shell时,它工作得很好

但是现在我已经配置了一个cronjob,使用
crontab
每隔5分钟执行一次该文件

但这给了我一个
classnotfoundException

Exception in thread "main" java.lang.NoClassDefFoundError: com/example/Demo
Caused by: java.lang.ClassNotFoundException: com.example.Demo
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Met
这是我的shell文件

#!/bin/sh

echo 'Starts'
lib1='HitURL.jar'

CLASSPATH=$lib1
java -cp HitURL.jar:. com.example.Demo http://www.google.com
echo 'Ends'
如何删除此错误


谢谢。

我敢打赌,问题在于,当您手动运行该脚本时,您从
HitURL.jar
所在的目录运行它,而当cron运行该进程时,它可能会将根目录用作当前目录。 因此,我将其更改为在
lib1
变量中包含
HitURL.jar
的完整路径——然后确保在
-cp
参数中也引用它,如下所示:

#!/bin/sh

echo 'Starts'
lib1='/full/path/to/HitURL.jar'

CLASSPATH=$lib1
java -cp $lib1:. com.example.Demo http://www.google.com

我敢打赌,问题在于,当您手动运行该脚本时,您从
HitURL.jar
所在的目录运行它,而当cron运行该进程时,它可能会使用根目录作为当前目录。 因此,我将其更改为在
lib1
变量中包含
HitURL.jar
的完整路径——然后确保在
-cp
参数中也引用它,如下所示:

#!/bin/sh

echo 'Starts'
lib1='/full/path/to/HitURL.jar'

CLASSPATH=$lib1
java -cp $lib1:. com.example.Demo http://www.google.com


HitURL.jar文件位于何处?与shell脚本位于同一文件夹中/home/mine/script
位于java.security.AccessController.doPrivileged(Native Met
@DanielChapman:不,这只是JVM启动程序过程的一部分。转到命令行并键入
java No.so.Class
,您将获得相同的stacktrace。您的HitURL.jar文件位于何处?与java.security.AccessController.doPrivileged上的shell script./home/mine/script
文件夹中(Native Met
@DanielChapman:不,这只是JVM启动程序过程的一部分。转到命令行并键入
java No.so.Class
,您将得到相同的stacktrace。刚才看到了您上面关于路径/home/mine/script的答案——所以lib1应该是这样的:lib1='/home/mine/script/HitURL.jar'建议lib1也包含点:
lib1=/home/mine/script/HitURL.jar:。
您可以在
lib1
中添加所需的所有jar,并通过以下方式将它们分开:除了HitURL.jar之外,我还有一个jar。如何将两个jar都放在类路径中?逗号分隔?不,冒号分隔:
lib1='/home/mine/scripts/HitURL.jar:/other/path/对于/a.jar'
刚才看到了您上面关于/home/mine/script路径的答案——所以lib1应该是这样的:lib1='/home/mine/script/HitURL.jar'另外,我建议lib1也包含点:
lib1=/home/mine/script/HitURL.jar:。
您可以在
lib1
中添加所有需要的jar,并用:I have分隔它们除了Hiturl.jar,还有一个jar。如何将两个jar都放在类路径中?逗号分隔?否,冒号分隔:
lib1='/home/mine/scripts/Hiturl.jar:/other/path/to/a.jar'