2

我正在使用 maven 构建一个包含两个 EJB 和一些 Web 应用程序的 ear 文件。我想使用瘦身战争,因为接下来可能会有更多的战争。

据我了解,以下将从所有战争文件的 WEB-INF/lib 目录中删除所有 *.jar 文件(ejb jar 除外):

<dependencies>
  <dependency>
    <groupId>my.domain</groupId>
    <artifactId>project</artifactId>
    <version>${project.version}</version>
    <type>war</type>
  </dependency>

  <!-- Scope: Provided for skinnies. -->
  <dependency>
    <groupId>my.domain</groupId>
    <artifactId>project</artifactId>
    <version>${project.version}</version>
    <type>pom</type>
  </dependency>
</dependencies>

[..]

 <configuration>
      <version>7</version>
      <defaultLitBundleDir>lib/</defaultLitBundleDir>
      <skinnyWars>true</skinnyWars>
[..]

我遇到的问题是,这显然也会删除所有webjars。Webjar 是 Web 库(css、JS 等),它们被打包在 jar 文件中,如下所示:

对于任何 Servlet 3 兼容的容器,WEB-INF/lib 目录中的 WebJars 会自动作为静态资源可用。这是因为 WEB-INF/lib 中 JAR 中 META-INF/resources 目录中的任何内容都会自动公开为静态资源。

来源:http ://www.webjars.org/documentation#servlet3

我真的喜欢这个主意。所以现在,当所有 jar 都移到 myear!/lib/webjar 时,包含的文件不再暴露。:-(

我还没有找到让 skinnyWars 不排除某些库(如 org.webjars: :)的选项。

如果有其他解决方案,我很乐意看到您的意见。

4

1 回答 1

0

所以,有一个简单的解决方案。正如您从我更新的答案中看到的那样,我两次拥有(几乎)相同的 war 文件依赖项:一次 as type=war,另一个 as type=pom,因此所有依赖项都包含在 ear 中并从 war 中剥离。

现在,我可以手动将共享库放在那里,但我正在考虑 DRY。所以我想采用上述解决方案。看起来有点hacky,但完美无缺。

但过了一会儿,我在 webjars 文档中单击了错误的链接 Servlet2,我没有使用它。

它通过具有另一个依赖项来工作,该依赖项仅包含一个 Servlet。此 servlet 将请求重写/传递到META-INF/resources. 我认为这可能也适用于我的情况。

所以我包含了在 servlet2 文档中看到的依赖,并将相应的部分添加到web.xml文件中。而不是它按预期工作。

于 2017-02-08T08:37:38.710 回答