Java quartz作业调度程序不作为OSGI包工作

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

我的代码包含quartz schedular的基本exmaple。。在普通的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();
    }
}
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+清单的副本下次会有所帮助:)