Java quartz作业调度程序不作为OSGI包工作
我的代码包含quartz schedular的基本exmaple。。在普通的java应用程序中,它正在运行,但当我将它转换为一个包并在karaf中部署它时,它就不起作用了Java quartz作业调度程序不作为OSGI包工作,java,maven,quartz-scheduler,osgi-bundle,karaf,Java,Maven,Quartz Scheduler,Osgi Bundle,Karaf,我的代码包含quartz schedular的基本exmaple。。在普通的java应用程序中,它正在运行,但当我将它转换为一个包并在karaf中部署它时,它就不起作用了 @Component @Service public class testImpl implements testI { @Override public void test() { System.out.println("testImpl started"); try
@Component
@Service
public class testImpl implements testI {
@Override
public void test() {
System.out.println("testImpl started");
try {
JobDetail job = JobBuilder.newJob(TestJob.class)
.withIdentity("testJob")
.build();
System.out.println("job \n");
Trigger trigger = TriggerBuilder.newTrigger()
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5)
.repeatForever())
.build();
System.out.println("trigger \n ");
//THIS PARTICULAR LINE ONWARDS THE CODE IS NOT EXCUTING IM NOT GETTING SYSOUT AFTER THIS LINE.
SchedulerFactory schFactory = new StdSchedulerFactory();
System.out.println("scheduler \n");
Scheduler sch = schFactory.getScheduler();
sch.start();
sch.scheduleJob(job, trigger);
} catch (Exception e) {
e.printStackTrace();
}
}
Schedular抛出了如下异常
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at org.quartz.impl.StdSchedulerFactory.<init>(StdSchedulerFactory.java:298)
at com.ericsson.testImpl.testImpl.test(testImpl.java:77)
at com.ericsson.testConsumer.testConsumer.bindTestI(testConsumer.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
java.lang.NoClassDefFoundError:org/slf4j/LoggerFactory
位于org.quartz.impl.StdSchedulerFactory。(StdSchedulerFactory.java:298)
testImpl.test(testImpl.java:77)
位于com.ericsson.testConsumer.testConsumer.bindTestI(testConsumer.java:27)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
但据我所知,Karaf对slf4j有着内在的支持。无需显式添加slf4j捆绑包。我敢肯定,您在Manifest.MF文件中错过了导入 打开包的清单,在“导入包”部分应该有org.slf4j。您似乎缺少导入包的功能
Import-Package: .....,org.slfj,....
如果您使用maven bundle插件,请扩展您的配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Import-Package>org.slf4j</Import-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
org.apache.felix
maven捆绑插件
真的
org.slf4j
如果这个答案没有帮助,请将完整堆栈跟踪和mvn dependency:tree的输出添加到您的问题中 我找到了错误的根本原因。在Quartz jar pom.xml中,slf4j依赖项版本是1.6.1,而我的Karaf-2.3.3内置的slf4j依赖项是1.6.6。将quartz pom更改为依赖项的正确版本会有所帮助。Ok,mvn dependency:tree+清单的副本下次会有所帮助:)