1

我的代码包含quartz schedular 的基本示例。在正常的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 包。

4

2 回答 2

1

我找到了错误的根本原因。在 Quartz jar pom.xml 中,slf4j 依赖版本是 1.6.1,而我的 Karaf-2.3.3 内置 slf4j 依赖是 1.6.6。使用正确版本的依赖项更改石英 pom 会有所帮助。

于 2014-03-18T05:36:15.773 回答
0

我很确定,您错过了 Manifest.MF 文件中的导入。

打开你的包的清单,在“导入包”部分应该有 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 的输出添加到您的问题中。

于 2014-03-14T14:29:17.970 回答