为了使示例尽可能简单,假设我有经典的 Java EE 5 应用程序。
假设我x-lib
在 EAR 模块中使用,并x-lib
使用commons-io
.
我y-lib
也在 WAR 模块中使用,并且也y-lib
使用commons-io
。EAR 设置为WAR中提供的。
我得到的结果是:
- app.ear
/lib
x-lib.jar
commons-io.jar
/app.war
/WEB-INF
/lib
y-lib.jar
commons-io.jar
我不希望将 commons-ioapp.war/WEB-INF/lib
打包在app.ear/lib
.
在我的战争 pom.xml 我有:
<dependency>
<groupId>my.group</groupId>
<artifactId>app</artifactId>
<type>ejb</artifact>
<scope>provided</scope>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>some.other.group</groupId>
<artifactId>y-lib</artifactId> <!-- This loads commons-io as compile dependency -->
<version>1.2.3</version>
</dependency>
有没有办法告诉 maven 我希望与应用程序 ejb 依赖项一起提供的所有内容都应该设置为提供而不包含在 WAR 中?
我不想跟踪所有那些重复的 JAR 并将它们设置为提供或明确排除。
编辑
我知道瘦身战解决方案。但是我不喜欢在 WAR 和 EAR 中复制依赖项的 drwaback。也许你知道如何克服这一点。