Groovy-скрипт не запускается из-за NoClassDefFoundError

Я написал очень простой скрипт для проверки правильности выражения cron:

import hudson.scheduler.CronTabList

try {
    def cron = CronTabList.create("@daily")
    println("Valid cron!")
} catch(Exception e) {
    println("Invalid cron!")
    e.printStackTrace()
}

Запуск этого завершается с сообщением:

Caught: java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
    at hudson.scheduler.BaseParser.<clinit>(BaseParser.java:149)
    at hudson.scheduler.CronTab.set(CronTab.java:113)
    at hudson.scheduler.CronTab.<init>(CronTab.java:100)
    at hudson.scheduler.CronTabList.create(CronTabList.java:121)
    at hudson.scheduler.CronTabList.create(CronTabList.java:96)
    at hudson.scheduler.CronTabList$create.call(Unknown Source)
    at validate_crontab.run(validate_crontab.groovy:7)
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContextListener
    ... 7 more

Process finished with exit code 1

Мои зависимости build.gradle выглядят так:

dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.3.11'
    compile group: 'org.quartz-scheduler', name: 'quartz', version: '2.3.0'
    compile group: 'org.jenkins-ci.main', name: 'jenkins-core', version: '2.85'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

Я просто не могу понять, в чем виноват и почему я не могу запустить сценарий.

Любая помощь высоко ценится!

1 ответ

Решение

Очевидно, что вы упускаете, это сервлет API. Например:

dependencies {
    compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
}

Если вы включите это в свои зависимости, ваш сценарий, скорее всего, запустится.

Но я думаю, что очень важно понять, почему вы получили эту ошибку. Если вы внимательно посмотрите на библиотеку jenkins-core, вы заметите, что она имеет "обеспеченную" зависимость от API сервлета. Предоставленная зависимость в более простых словах означает, что библиотека (в вашем случае jenkins-core) скомпилирована с предположением, что jar API сервлета будет присутствовать в пути к классам в вашей производственной среде - например, при использовании библиотеки lib в запущенном веб-приложении. в контейнере сервлетов.

Я предполагаю, что вы запускаете свой отличный скрипт как отдельное приложение, поэтому вы получаете ошибку. И... ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ - Я не знаю, предполагается ли использование jenkins-core в автономных приложениях:-).

Другие вопросы по тегам