Не находит класс java.lang.NoClassDefFoundError: javax / servlet / SessionCookieConfig

У меня есть зависимости в проекте

 compile("org.springframework.boot:spring-boot-starter-data-jpa") {
    exclude group: "org.apache.tomcat", module: "tomcat-jdbc"
    exclude group: "org.hibernate", module: "hibernate-entitymanager"
}
compile("org.springframework.boot:spring-boot-starter-security")
compile("org.springframework.boot:spring-boot-starter-mail")
compile("org.springframework.boot:spring-boot-configuration-processor")
compile("org.eclipse.persistence:org.eclipse.persistence.jpa")
compile("org.eclipse.persistence:org.eclipse.persistence.jpa.modelgen.processor")
compile("com.google.api-client:google-api-client")
compile("com.google.oauth-client:google-oauth-client-jetty")
compile("com.google.apis:google-api-services-drive")

   // dependencies from the inherited module (compile(project("..."))
    api("com.fasterxml.jackson.core:jackson-databind")
    api("org.hibernate.validator:hibernate-validator")
    api("commons-validator:commons-validator")
    api("org.apache.commons:commons-lang3")
    implementation("com.google.guava:guava")

Я хотел провести интеграционные тесты, поэтому добавил зависимости

testCompile("com.github.springtestdbunit:spring-test-dbunit:1.3.0")
testCompile("org.dbunit:dbunit:2.5.4")

Я создал базовый класс конфигурации

/**
 * Spring configuration class for integration tests.
 */
@Configuration 
@EnableAutoConfiguration 
@ComponentScan
public class PopcornCoreTestApplication {}

и абстрактный класс

/**
 * Base class to save on configuration.
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = PopcornCoreTestApplication.class, webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@TestExecutionListeners(
        {
                DependencyInjectionTestExecutionListener.class,
                DirtiesContextTestExecutionListener.class,
                TransactionalTestExecutionListener.class,
                TransactionDbUnitTestExecutionListener.class
        }
)
public abstract class DBUnitTestBase {

    @Autowired
    private UserRepository userRepository;

    /**
     * Clean out the db after every test.
     */
    @After
    public void cleanup() {
        this.userRepository.deleteAll();
    }
}

и пример теста, чтобы проверить, работает ли он

/**
 * Integration tests for UserPersistenceServiceImpl.
 */
public class UserPersistenceServiceImplIntegrationTests extends DBUnitTestBase {

    @Autowired
    private UserPersistenceService userPersistenceService;

    /**
     * Setup.
     */
   @Test
    public void setup() {
        Assert.assertThat(this.userRepository.count(), Matchers.is(0L));
    }
}

и это не работает. Я получаю сообщение о начале теста

    lip 04, 2018 6:30:10 PM org.springframework.boot.test.context.SpringBootTestContextBootstrapper buildDefaultMergedContextConfiguration
INFO: Neither @ContextConfiguration nor @ContextHierarchy found for test class [com.jonki.popcorn.core.jpa.service.UserPersistenceServiceImplIntegrationTests], using SpringBootContextLoader
lip 04, 2018 6:30:10 PM org.springframework.test.context.support.AbstractContextLoader generateDefaultLocations
INFO: Could not detect default resource locations for test class [com.jonki.popcorn.core.jpa.service.UserPersistenceServiceImplIntegrationTests]: no resource found for suffixes {-context.xml, Context.groovy}.
lip 04, 2018 6:30:11 PM org.springframework.boot.test.context.SpringBootTestContextBootstrapper getTestExecutionListeners
INFO: Using TestExecutionListeners: [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@769e7ee8, org.springframework.test.context.support.DirtiesContextTestExecutionListener@5276e6b0, org.springframework.test.context.transaction.TransactionalTestExecutionListener@71b1176b, com.github.springtestdbunit.TransactionDbUnitTestExecutionListener@6193932a]

java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig
...

lip 04, 2018 6:30:12 PM org.springframework.test.context.TestContextManager prepareTestInstance
SEVERE: Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@769e7ee8] to prepare test instance [com.jonki.popcorn.core.jpa.service.UserPersistenceServiceImplIntegrationTests@402bba4f]
java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig

на pastebin вся ошибка https://pastebin.com/8kC4Mkm6

Я пытался добавить зависимость

javax.servlet-api

но это не помогло, и та же ошибка все еще существует.

Как с этим бороться?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
4 120
2

Ответы 2

Класс SessionCookieConfig появляется в servlet-api версии 3.0.

Чтобы исправить ваши проблемы, просто добавьте эту зависимость в свой файл build.gradle

testCompile("javax.servlet:javax.servlet-api:3.1.0")

для всех пользователей mvn, пожалуйста, добавьте ниже зависимость к pom.xml

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>test</scope>
</dependency>

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