使用Webjars和Spark导入静态jQuery JS文件

时间:2016-03-18 12:54:09

标签: java webjars

我使用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.csswebjars/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>

编辑2:

我也在我的控制器中拨打staticFileLocation()两次:

staticFileLocation("/static");
staticFileLocation("/META-INF/resources");

这两个电话似乎相互冲突。

3 个答案:

答案 0 :(得分:1)

jquery版本2.2.1依赖关系可能会通过对jquerybootstrap的传递依赖而被覆盖。您可以在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文件。