如何在cron下运行Java程序并导入jar

时间:2012-08-07 05:56:52

标签: java cron terminal noclassdeffounderror

我的源文件是.../MyDir/proj/myProj.java。 jar文件位于.../MyDir/proj/library下。 jar文件来自HTMLUnit 2.10

这是我的cron文件的来源:

0 0 * * * java -classpath .../MyDir/proj/ myProj

但它给了我错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com/gargoylesoftware/htmlunit/WebClient

如何修改cron文件以导入jar文件?

4 个答案:

答案 0 :(得分:1)

在java中实现CRON作业

非常简单

必填图书馆: 石英2.0.0.jar

计划程序发起人:

import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

import java.text.ParseException;

import org.quartz.CronScheduleBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

public class SchedulerListener{

    static Scheduler scheduler = null;
    public static void main(String[] args) {
        // Setup the Job class and the Job group
        JobDetail job = newJob(FileUploadToAzure.class).withIdentity(
                        "CronQuartzJob", "Group").build();

        // Create a Trigger that fires every hour.
        Trigger trigger;
        try {
            trigger = newTrigger()
            .withIdentity("TriggerName", "Group")
            .withSchedule(CronScheduleBuilder.cronSchedule("0 0 * * * ?"))
            .build();

            // Setup the Job and Trigger with Scheduler & schedule jobs
            scheduler = new StdSchedulerFactory().getScheduler();
            scheduler.start();
            scheduler.scheduleJob(job, trigger);

        } catch (ParseException | SchedulerException e) {
            e.printStackTrace();
        }


    }
} 

计划程序类:

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class SchedulerJob implements Job {
  @SuppressWarnings("unchecked")
    public void execute(JobExecutionContext context) throws JobExecutionException {
    System.out.println("Print at specific time");
}
}

<强> CronTrigger 表达意义 0 0 12 * *?每天中午12点(中午)开火 0 15 10? * *每天上午10:15开火 0 15 10 * *?每天上午10:15开火 0 15 10 * *? *每天上午10:15开火 0 15 10 * *? 2005年2005年每天上午10:15开火 0 * 14 * *?每天从下午2点开始,每天下午2:59结束 0 0/5 14 * *?每隔5分钟开始一次,从下午2点开始,每天下午2:55结束

<强> More details about CRON Trigger, then please refer below link

http://www.askmani.net/question/crontrigger/

答案 1 :(得分:0)

这样的事情:

0 0 * * * java -classpath .../MyDir/proj/:.../MyDir/proj/library/jar1.jar:.../MyDir/proj/library/jar2.jar myProj

或者如果您使用的是最新的JVM,则可以使用通配符来匹配所有JAR文件。

0 0 * * * java -classpath .../MyDir/proj/:.../MyDir/proj/library/\* myProj

(反斜杠可能是不必要的,因为'globbing'不太可能匹配该上下文中的任何内容......)


更好的是,将命令(以及需要运行的任何其他命令准备启动)放入shell脚本,然后从crontab条目运行脚本。

答案 2 :(得分:0)

有一种简单而且更好的方法:您可以将用于运行Java应用程序的所有Java语句复制到Linux脚本(runJavaApp.sh),然后验证它是否在Linux中的任何目录中正常运行。如果一切正常。你可以将它绑定到cron。

答案 3 :(得分:0)

对于Spring Boot Java用户,您可以使用 @scheduled 批注。有关更多详细信息和示例,请访问this