我正在使用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
文件中。而且它没有按预期工作。