我正在使用部署到 IBM WebSphere Application Server 的 JAX-RS 和 AngularJS 编写一个简单的报告 Web 应用程序。因为它真的非常简单,所以我尽量保持尽可能少的依赖关系,所以我没有使用任何花哨的服务器端框架。
为了提供静态资源,我编写了这个控制器。我把它们放在src/main/resources
文件夹里。
@Path("/")
public class Assets {
@GET
@Path("{path:.*\\.js}")
public Response javascript(@PathParam("path") String resourceName) {
return serveResource(resourceName, "application/javascript");
}
private Response serveResource(String resourceName, String contentType) {
InputStream inputStream =
getClass().getClassLoader().getResourceAsStream(resourceName);
return Response.ok(inputStream)
.header(HttpHeaders.CONTENT_TYPE, contentType)
.build();
}
}
到目前为止,一切都很好。
当我使用几个 JavaScript 库(jQuery、Underscore.js、AngularJS)时,我想使用WebJars。根据webjars.org 上的文档:
对于任何与 Servlet 3 兼容的容器,目录中的 WebJars 都会
WEB-INF/lib
自动作为静态资源使用。这是因为META-INF/resources
JAR 中目录中的任何内容WEB-INF/lib
都会自动公开为静态资源。
当我将相应的 WebJars 放入我pom.xml
的 . 这是我到目前为止发现的:
- 当然,WebJars 存在于生成的
.war
包中,在WEB-INF/lib
文件夹中。 ClassLoader
在我的serveResource
方法声明中使用的所有 WebJars 都在其类路径中。- 的
ClassLoader
实现是com.ibm.ws.classloader.CompoundClassLoader
. META-INF/resources
文件夹中 WebJars 中的任何资源对ClassLoader
. 没有任何。
如何让类加载器看到 WebJars 中的资源?