Eclipse STS запускает Spring Boot локально с подпроектами - PullRequest
0 голосов
/ 22 мая 2018

У меня есть следующая структура проекта:

root project
|-- controller
|-- core
|-- widgets
    |-- widgetA
    |-- widgetB

Все эти проекты встроены в jar, кроме контроллера.Затем файлы jar развертываются в папке классов, и контроллер использует context.xml для указания их местоположения.

Все это прекрасно работает во время развертывания (за исключением того, что 'redeploy' Tomcat не выполняет повторное развертывание, я подозреваю, что проблема с загрузчиками классов,но выгрузка / развертывание работает нормально).Однако в настоящее время мы не можем запустить это локально в STS, потому что контроллеру нужен компонент из проекта 'widgets', который система не может найти.

Проект начинается нормально, когда я выполняю проект контроллера как Spring BootПриложение.Он загружает и обнаруживает компоненты, определенные в «базовом» проекте.Но почему-то проект «виджетов» не сканируется Spring.Опять же, когда это развернуто, Spring сканирует их все очень хорошо (я полагаю, из-за context.xml, который определяет JarResources для загрузки).Но я просто не могу понять, как заставить STS «увидеть» проект.

Редактировать: Для ясности вот ошибка, которую я получаю:

May 22, 2018 2:32:00 PM org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext refresh
WARNING: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'Controller': Unsatisfied dependency expressed through field 'widgetMap'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.util.Map<java.lang.String, com.mycompany.project.widgets.WidgetInterface>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
System is shutting down
May 22, 2018 2:32:00 PM org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor shutdown
INFO: Shutting down ExecutorService 'getAsyncExecutor'
May 22, 2018 2:32:00 PM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service [Tomcat]
May 22, 2018 2:32:00 PM org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener logAutoConfigurationReport
INFO: 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
May 22, 2018 2:32:00 PM org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter report
SEVERE: 

***************************
APPLICATION FAILED TO START
***************************

Description:

Field widgetMap in com.mycompany.project.controller.Controller required a bean of type 'com.mycompany.project.widgets.WidgetInterface' that could not be found.


Action:

Consider defining a bean of type 'com.mycompany.project.widgets.WidgetInterface' in your configuration.

1 Ответ

0 голосов
/ 22 мая 2018

Я решил проблему.

Оказывается, я не добавлял отдельные виджеты в путь сборки, а только класс 'widgets'.

Поскольку я использовал карту @Autowiredобъект, мне нужно хотя бы одну из моих реализаций WidgetInterface на пути сборки.Поскольку проекты реализации виджета отсутствовали, он не мог правильно создать экземпляр карты и выдавал ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...