Vaadin Flow и Spring Boot не могут найти ресурс через контекст сервлета

У меня проблема с новой проблемой Vaadin Flow, которая сводит меня с ума в последние дни, поэтому я надеюсь, что вы, ребята, сможете мне помочь.

Используемые мной технологии:

  1. Vaadin Flow Бета 8
  2. Spring Boot 2.0.1.RELEASE
  3. Встроенный Tomcat
  4. Maven как инструмент сборки

Схема проекта:

Родительский проект
|
| -api
|
| –общий
|
| -webapp

Базовая ситуация: у меня есть монолитное приложение Vaadin Flow, которое теперь я хочу разделить на 3 части: webapp, common и api. До этого раскола все нормально работает.

Текущая ситуация: когда я пытаюсь перейти на localhost: 8080 /, я получил следующую ошибку:

Caused by: java.lang.IllegalStateException: Can't find resource 'frontend://styles/landing.html' via the servlet context
at com.vaadin.flow.component.polymertemplate.DefaultTemplateParser.getTemplateContent(DefaultTemplateParser.java:111) ~[flow-server-1.0.0.beta7.jar:na]
at com.vaadin.flow.component.polymertemplate.TemplateDataAnalyzer.parseTemplate(TemplateDataAnalyzer.java:180) ~[flow-server-1.0.0.beta7.jar:na]
at com.vaadin.flow.component.polymertemplate.TemplateInitializer.<init>(TemplateInitializer.java:91) ~[flow-server-1.0.0.beta7.jar:na]
at com.vaadin.flow.component.polymertemplate.PolymerTemplate.<init>(PolymerTemplate.java:78) ~[flow-server-1.0.0.beta7.jar:na]
at com.vaadin.flow.component.polymertemplate.PolymerTemplate.<init>(PolymerTemplate.java:93) ~[flow-server-1.0.0.beta7.jar:na]
at com.flatNow.ui.common.abstracts.AbstractView.<init>(AbstractView.java:6) ~[classes/:na]
at com.flatNow.ui.landing.LandingView.<init>(LandingView.java:23) ~[classes/:na]
at com.flatNow.ui.landing.LandingPresenter.<init>(LandingPresenter.java:18) ~[classes/:na]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_162]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_162]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_162]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_162]
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:170) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
... 109 common frames omitted

Соответствующий класс View:

@Getter
@Tag("welcome-view")
@HtmlImport("styles/landing.html")
class LandingView extends AbstractView<TemplateModel> {
}

Мои ресурсы лежат в src / main / resources, там есть интерфейс и активы папки.

Я пробую следующее:
Измените htmlImport на context: //frontend/styles/landing.html, /frontend/styles/landing.html, ../frontend/styles/landing.html
https://github.com/vaadin/skeleton-starter-flow-spring/issues/28

Странно то, что я попытался запустить проект в Eclipse, и он сработал из коробки. Без вопросов.

Я надеюсь, что вы можете мне помочь, ребята, если я что-то упустил, укажите на это!


person Dudei95    schedule 05.05.2018    source источник


Ответы (1)


Ресурсы HTML - это не ресурсы пути к классам, а статические веб-ресурсы. Протокол frontend: // сопоставляется с context: // frontend (в режиме разработки), который, в свою очередь, сопоставляется с корневым контекстом + ”/ frontend”, поэтому вам следует разместить свои статические файлы так, чтобы они могли быть загружены браузером с помощью например http://localhost:8080/frontend/styles/landing.html.

Теперь с обычным проектом в стиле войны это будет src / main / webapp / frontend / styles / landing.html. Если ресурсы находятся в другом файле jar, стандартным расположением будет /META-INF/resources/frontend/styles/landing.html. Spring Boot имеет некоторые другие / дополнительные способы определения статических файлов, и они тоже должны быть в порядке, если их можно найти через контекст сервлета, как и ожидалось для всех статических ресурсов.

Если вы запустите Eclipse, все может работать немного по-другому, поскольку Eclipse не упаковывает и не использует другие проекты как файлы jar, а вместо этого напрямую использует другие файлы проекта.

person Artur Signell    schedule 06.05.2018