我使用Spark作为框架来构建Java Web服务器,并依赖Bootstrap和jQuery作为前端。我正在使用Webjars将依赖项添加到pom.xml
。
导入静态文件的问题。虽然导入Bootstrap的CSS和JS文件效果很好,但它不适用于jQuery JS文件。我使用staticFileLocation("/META-INF/resources");
导入静态文件,HTML标头包含:
<link rel="stylesheet" href="webjars/bootstrap/3.3.6/css/bootstrap.min.css">
<script type="text/javascript" src="webjars/jquery/2.2.1/jquery.min.js"></script>
<script type="text/javascript" src="webjars/bootstrap/3.3.6/js/bootstrap.min.js"></script>
webjars/bootstrap/3.3.6/css/bootstrap.min.css
和webjars/bootstrap/3.3.6/js/bootstrap.min.js
路由运行良好,但webjars/jquery/2.2.1/jquery.min.js
回答404.
不知何故,看起来jQuery JS文件在classpath中不存在。有什么线索我错过了吗?
pom.xml
依赖关系如下:
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>3.3.6</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>2.2.1</version>
</dependency>
我也在我的控制器中拨打staticFileLocation()
两次:
staticFileLocation("/static");
staticFileLocation("/META-INF/resources");
这两个电话似乎相互冲突。
答案 0 :(得分:1)
jquery
版本2.2.1
依赖关系可能会通过对jquery
中bootstrap
的传递依赖而被覆盖。您可以在bootstrap
依赖项中设置排除项:
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>3.3.6</version>
<exclusions>
<exclusion>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
</exclusion>
</exclusions>
</dependency>
或者您可以删除对jquery
的显式依赖关系,并使用1.11.1
的{{1}}传递依据。
答案 1 :(得分:1)
我发现如果您从使用mvn exec:exec
运行项目的IDE运行Spark,那么您只能在/META-INF/resources/webjars
中获得引导程序。
但是如果先创建jar-with-dependencies然后使用java -jar <your-project-name-and-version>-jar-with-dependencies.jar
运行它,您将获得整套资源(在您的情况下都是bootstrap和jquery)。
实际上,您可以使用以下代码轻松检查可用资源:
get("/list", (req, res) -> {
Resource resource = Resource.newClassPathResource("/META-INF/resources");
return resource.getListHTML("/", true);
});
访问/list
您将获得可用资源的完整列表。
答案 2 :(得分:0)
潜入Spark的源代码,我发现只能引用一个静态文件夹位置。因此,只能同时使用一个webjar,它会使Spark忽略任何其他位置的任何CSS或JS文件。