我偶然发现了 maven 主题 skinnyWars
在 http://maven.apache.org/plugins/maven-ear-plugin/examples/skinny-wars.html .如前所述,我可以使用此方法将选定的依赖项从 WAR 模块移动到 EAR 模块。它们将可用于 EAR 中的所有其他 WAR 模块。
正如我发现移动的依赖项必须在 EAR 模块中声明并且必须包含在 META-INF\lib
中。目录。 这不适用于 EJB 模块 ,它们位于 EAR 模块的根目录中。
我的问题是如何从 WAR 中删除重复的 EJB 模块并将引用指向 EAR 文件中的那些?
现在的结构是这样的:
\-EAR
-ejb.jar
-META-INF\lib
-shared libraries
-web.war
-WEB-INF\lib
-ejb.jar
-other non-shared libraries
最佳答案
我已经回答了一个类似的问题:How to make maven place all jars common to wars inside the same EAR to EAR root?
不幸的是,这似乎不适用于 ejb 模块。正如您已经提到的,它们会被重复。
您还可以使用的一件事是 maven-war-plugin 的配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
</configuration>
</plugin>
这将彻底清除 WAR 的 lib 文件夹中的所有内容,但如果您必须在没有周围 EAR 的单独机器上另外部署 WAR,它也会有其缺点。
关于maven skinnyWars 不会从 WEB-INF\lib\中删除 ejb jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17294391/