Maven:让SkinnyWars保留一些库

时间:2017-02-07 16:12:16

标签: java maven war ear skinny-war

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

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

<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兼容的容器,其中包含WebJars   WEB-INF / lib目录自动以静态方式提供   资源。这有效,因为META-INF /资源中的任何内容   WEB-INF / lib中JAR中的目录自动公开为静态   资源。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

所以,有一个简单的解决方案。从我更新的答案中可以看出,我对war文件的依赖性几乎相同(两次):一次为type=war,另一次为type=pom,因此所有依赖项都包含在耳中并从中删除战争。

现在,我可以手动将共享库放在那里,但我是thinking of DRY。所以我想采用上面提到的解决方案。看起来有点hacky,但是完美无缺。

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

它通过另一个依赖项工作,它只包含一个Servlet。此servlet将请求重写/传递到META-INF/resources中的相应文件。我认为这也适用于我的情况。

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