Мой код содержит основной пример кварцевого расписания. В обычном Java-приложении его работает, но когда Im конвертирует его в виде пакета и развертывает его в 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.
Я обнаружил причину ошибки. В Quartz jar pom.xml версия зависимости slf4j была 1.6.1, а моя зависимая от Karaf-2.3.3 встроенная slf4j - 1.6.6. Смена кварцевой помпы с правильной версией для зависимостей помогает.
Я уверен, вы пропустите импорт в вашем файле 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>
Если этот ответ не помог, добавьте полную трассировку стека и вывод зависимости mvn: tree к вашему вопросу.