Spring boot webjars: невозможно загрузить библиотеку javascript через webjar

У меня есть проект весенней загрузки (я использую Thymeleaf для шаблонов), где я хочу использовать некоторые библиотеки jQuery.

К сожалению, веб-банки не загружаются вообще. Я перепробовал много конфигураций, но все они потерпели неудачу.

Вот фрагмент кода моей HTML-страницы:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head lang="en">

<title>JAC</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

<script src="http://cdn.jsdelivr.net/webjars/jquery/2.1.4/jquery.js"
        th:src="@{/webjars/jquery/2.1.4/jquery.min.js}" type="text/javascript"></script>
<script src="http://cdn.jsdelivr.net/webjars/jquery-file-upload/9.10.1/jquery.fileupload.js"  type="text/javascript"
        th:src="@{/webjars/jquery-file-upload/9.10.1/jquery.fileupload.min.js}"></script>
<link href="http://cdn.jsdelivr.net/webjars/bootstrap/3.3.5/css/bootstrap.min.css"
      th:href="@{/webjars/bootstrap/3.3.5/css/bootstrap.min.css}"
      rel="stylesheet" media="screen" />
<link href="http://cdn.jsdelivr.net/webjars/jquery-file-upload/9.10.1/jquery.fileupload.css"
      rel="stylesheet" media="screen" />
</head>

Я добавил их в файл pom:

<dependency>
    <groupId>org.webjars.npm</groupId>
    <artifactId>jquery</artifactId>
    <version>2.1.4</version>
</dependency>
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>bootstrap</artifactId>
    <version>3.3.5</version>
</dependency>

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery-file-upload</artifactId>
    <version>9.10.1</version>
</dependency>

Но при вызове страницы я получил 404 на jquery.min.js и jquery.fileupload.min.js.

GET http://localhost:8888/webjars/jquery-file-upload/9.10.1/jquery.fileupload.min.js 
2015-09-21 02:02:04.059 home:9 
GET http://localhost:8888/webjars/jquery/2.1.4/jquery.min.js 404 (Not Found)

8 ответов

Решение

Вы ссылаетесь на библиотеку jquery правильно. Возможно, вам не хватает конфигурации обработчика ресурсов.

<mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/"/>

Или если вы используете JavaConfig

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
  }

}

Webjars документация

Если это не сработает, проверьте, есть ли у вас webjars в classpath (откройте JAR своего приложения в 7Zip и проверьте, есть ли внутри него ресурсы webjars.)

Дополнительный ответ найден в одном блоге:

При использовании Spring Framework версии 4.2 или выше она автоматически обнаружит библиотеку webjars-locator на пути к классам и будет использовать ее для автоматического определения версии любых ресурсов WebJars.

Чтобы включить эту функцию, мы добавим библиотеку webjars-locator в качестве зависимости приложения:

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>webjars-locator</artifactId>
    <version>0.30</version>
</dependency>

В этом случае мы можем ссылаться на ресурсы WebJars без использования версии; (...)

После проверки webjar на наличие jquery я получил это, добавив подпуть dist.

<script src="webjars/jquery/2.1.4/dist/jquery.min.js" type="text/javascript"></script>

Если вы используете servlet 3.x, просто добавьте:

1- с использованием конфигурации Java:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    public void addResourceHandlers(ResourceHandlerRegistry registry) {

            registry.addResourceHandler("/webjars/**").addResourceLocations("/webjars/").resourceChain(false);

       registry.setOrder(1);
    }


}

2- или xml config:

<mvc:resources mapping="/webjars/**" location="/webjars/"> 
  <mvc:resource-chain resource-cache="false" /> 
</mvc:resources>

Зависимости webjars должны быть доступны в classpath весенней загрузки, поэтому вы должны попытаться ссылаться на webjars с помощью атрибута src следующим образом:

<script src="webjars/jquery/2.1.4/jquery.min.js" type="text/javascript"></script>
<script src="webjars/jquery-file-upload/9.10.1/jquery.fileupload.min.js"></script>
<link href="webjars/bootstrap/3.3.5/css/bootstrap.min.css"
  rel="stylesheet" media="screen" />
<link href="webjars/jquery-file-upload/9.10.1/jquery.fileupload.css"
  rel="stylesheet" media="screen" />

Я закончил чистую установку mvn (из командной строки cmd), чтобы очистить цель и правильно заполнить все lib/jars. Я использую Spring boot с Intelij.

Убедитесь, что при добавлении зависимостей вы обновили версию bootstrap или jquery, вам следует обновить URL-адреса в jsp или html, указав правильную версию bootstrap и jquery.

После проверки веб-страниц на предмет jquery, я получил эту работу, добавив "ВЕРСИЯ БИБЛИОТЕКИ JQUERY, ИСПОЛЬЗУЕМУЮ В ФАЙЛЕ POM.XML"

<script src = "/webjars/jquery/3.1.0/jquery.min.js"></script>

(в моем случае я использовал версию 3.1.0, использовал только ту версию, которую используете вы).

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