我正在使用maven构建带有两个EJB和一些Web应用程序的ear文件。我想使用枯燥的战争,因为可能会发生更多战争。

据我了解,以下内容将从所有war文件的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。 Webjars是Web库(css,JS等),它们打包在jar文件中,如下所示:


  使用任何与Servlet 3兼容的容器,
  WEB-INF / lib目录自动变为静态
  资源。之所以可行,是因为META-INF /资源中的任何内容
  WEB-INF / lib中JAR中的目录自动显示为静态
  资源。


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

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

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

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

最佳答案

因此,有一个简单的解决方案。从更新后的答案中可以看到,战争文件(几乎)具有两次(几乎)相同的依赖关系:一次是type=war,另一次是type=pom,因此所有依赖项都包含在耳朵中并从战争中剥离了。

现在,我可以手动将共享库放在这里,但是我是thinking of DRY。因此,我想采用上述解决方案。似乎有点骇人听闻,但工作正常。

但是片刻之后,我单击了我没有使用的wrong link in the webjars documentation for Servlet2

它通过具有另一个依赖项(仅由一个Servlet组成)来工作。该servlet将请求重写/传递给META-INF/resources中的相应文件。我认为这可能也适合我的情况。

因此,我包括了servlet2文档中看到的依赖项,并将相应的部分添加到了web.xml文件中。而且它没有按预期工作。

09-26 16:53