1

我使用 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 文件不存在于类路径中。任何线索我错过了什么?

编辑:

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");

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

4

3 回答 3

1

我发现如果您从用于mvn exec:exec运行项目的 IDE 运行 Spark,那么您只能在/META-INF/resources/webjars.

但是,如果您先制作一个带有依赖项的 jar,然后再运行它,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您将获得可用资源的完整列表。

于 2016-04-06T10:27:39.130 回答
1

jquery版本依赖可能通过对in的2.2.1传递依赖被覆盖。您可以在依赖项中设置排除项:jquerybootstrapbootstrap

<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>

或者,您可以删除显式依赖并使用引导程序 pom.xmljquery的传递依赖。1.11.1

于 2016-03-20T14:36:19.513 回答
0

深入研究 Spark 的源代码,我发现只能引用一个静态文件夹位置。因此,只能同时使用一个 webjar,这将使 Spark 忽略任何其他位置的任何 CSS 或 JS 文件。

于 2016-03-21T18:32:40.477 回答