我的代码包含石英计划的基本例子。在正常的Java应用程序中它运行但是当我将它作为一个包转换并在karaf中部署它时它不起作用。
@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();
}
}
计划正在抛出像
这样的例外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)
但据我所知,Karaf对slf4j有内置支持。无需显式添加slf4j bundle。
答案 0 :(得分:1)
我找到了错误的根本原因。在Quartz jar pom.xml中,slf4j依赖版本为1.6.1,而我的Karaf-2.3.3内置slf4j依赖版本为1.6.6。使用正确的依赖版本更改石英pom有助于。
答案 1 :(得分:0)
我很确定,您错过了Manifest.MF文件中的导入。
打开捆绑包的清单,在&#34; Import-Package&#34;部分应该是org.slf4j。您似乎缺少导入包。
Import-Package: .....,org.slfj,....
如果您使用maven-bundle-plugin,请扩展您的配置:
<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>
如果这个答案没有帮助,请将完整的堆栈跟踪和mvn dependency:tree的输出添加到您的问题中。