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 в 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, использовал только ту версию, которую используете вы).