Spring-Boot ResourceLocations не добавляет файл css, в результате чего 404

Ну, у меня есть рабочее приложение spring-boot, которое работает на локальном компьютере просто отлично. Однако я заметил, что когда я делаю пакет mvn, то ни один из моих CSS или java-скриптов не находится в

/src/main/wepapp/css

копируются в файл jar (пакет), созданный в целевом каталоге.

справочное руководство spring boot говорит

65.3 преобразовать существующее приложение в Spring Boot " статические ресурсы могут быть перемещены в / public (или / static или /ресурсы или /META-INF/resources) в корневом каталоге пути к классам."

24.1.4 статическое содержимое " не используйте папку src/main/webapp, если ваше приложение будет упаковано как jar. Хотя эта папка является общий стандарт, он будет работать только с упаковкой войны и он будет молчаливо игнорируется большинством инструментов сборки, если вы создаете jar."

так что это означает, что я могу поместить все мои папки js и css в папку

/src/main/resources/static

т. е. теперь мой структура выглядит так

/src/main/resources/static/css/
/src/main/resources/static/js/

все мои шаблоны thymeleaf, однако, все еще находятся в

/src/main/resources/templates/

я сделал это, и, насколько я понимаю, мне нужно добавить ResourceHandler к моей ResourceHandlerRegistry. Раньше, когда все мои ccs были в "/src/main/wepapp/css/", мои ResourceHandlers выглядели так, и это сработало очень хорошо для меня.

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/pdfs/**").addResourceLocations("/pdfs/").setCachePeriod(0);
    registry.addResourceHandler("/img/**").addResourceLocations("/img/").setCachePeriod(0);
    registry.addResourceHandler("/js/**").addResourceLocations("/js/").setCachePeriod(0);
    registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(0);

}

я попытался добавить несколько обработчиков, таких как

 registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(0);

или

 registry.addResourceHandler("/css/**").addResourceLocations("/static/css/").setCachePeriod(0);

или

 registry.addResourceHandler("/css/**").addResourceLocations("/").setCachePeriod(0);

etc.

но никто из них не работал для меня. Шаблоны html отображаются, но консоль веб-браузера сообщает 404 при попытке найти /css / corresponding.css или/js / соответствие.js

Я намеренно отключил Spring security в своем тестовом проекте, чтобы упростить отладку этой проблемы.

еще одна вещь, которую я не полностью понять-это сборка развертывания. Я прочитал статью, в которой говорилось, что, когда я хочу иметь определенные папки в моем целевом файле jar пакета, сгенерированном maven, мне нужно включить эту папку в мою сборку развертывания, ну, я сделал, однако "пакет mvn" все еще не собирает все содержимое(вложенные папки) моей /src/main/static папки в целевой файл jar. Однако я вижу папку "шаблоны", скопированную в файл jar. Так что за этим кроется какая-то другая магия. сцена.

enter image description here

вот как я могу объявить css в моем макете thymeleaf, т. е.

/src/main/resources/templates/layout.html


<!DOCTYPE html>
<html>
  <head>
    <title layout:title-pattern="$DECORATOR_TITLE - $CONTENT_TITLE">Task List</title>
    <link rel="stylesheet" type="text/css" media="all"  th:href="@{/css/syncServer.css}"  href="../css/syncServer.css" />
    ...
  </head>
  <body>
      ...
  </body>
</html>

мой вопрос: Является ли конфигурация, которую я сделал до сих пор правильно, и если да, то какие другие параметры / настройки мне нужно знать, чтобы приложение находило файлы css в /src/main/static/css/

один

тестовый проект

git@github.com:TheDictator/sArchitecture.git

1 ответов


Если вы все на resources и полностью удалить addResourceHandlers конфигурации, то все работает нормально.

это означает, что структура ресурсов будет выглядеть следующим образом:

enter image description here