Сбой загрузки Spring с модулями Java9 - PullRequest
0 голосов
/ 18 июня 2020

У меня есть устаревшее приложение java, которое представляет собой монолитную сеть на основе сервлета. Мы хотим разрабатывать новые API, но за пределами монолита. Но зависимости с монолитом - проблема. Следовательно, мы изучаем возможность использования модулей Java9 в устаревшем приложении. В качестве первого шага мы просто делаем весь монолит под модулем путем рефакторинга папок и добавляем module-info. java, который экспортирует определенные пакеты. Тогда другая папка в проекте будет служить модулем API, основанным на Spring Boot. Пока это простое приложение с RestController и отображением получения.

Моя информация о модуле для модуля API выглядит следующим образом.

module api_project {
    requires spring.web;  
    requires spring.boot;  
    requires spring.boot.starter.web;  
    requires spring.boot.autoconfigure;  
    opens net.ifao.api to spring.core;  
}

и зависимости от градиента для модуля API выглядит следующим образом

dependencies {  
    implementation project(':ibetms_project')  
    implementation('org.springframework.boot:spring-boot-starter-web') {  
        exclude group: 'org.apache.tomcat.embed', module: 'tomcat-embed-core'  
    }  
    compile "javax.servlet:javax.servlet-api:3.1.0"  
}

Если вы заметили, я исключаю модуль tomcat-embed-core, без которого я получаю сотни ошибок сборки, таких как

module spring.boot reads package javax.servlet from both javax.servlet.api and org.apache.tomcat.embed.core

И вы можете видеть, что я явно добавить javax.servlet-api.3.0.1. Но даже если я добавлю это или нет, я смогу успешно построить проект, но при запуске сервера я получаю следующую ошибку.

org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.

Ожидается ли это? Стоит ли добавить дополнительную зависимость? Я создал образец приложения для быстрой справки . Ваша помощь приветствуется

1 Ответ

0 голосов
/ 19 июня 2020

Решение заключалось в том, чтобы не исключать tomcat из spring-boot-starter-web, а изменить устаревший модуль приложения, чтобы сохранить javax.servlet-api CompileOnly. В образец приложения, указанный в вопросе, добавлено исправление. Пожалуйста, обратитесь к коммитам, чтобы увидеть различия.

...