我有一个有2个依赖项的maven3 webapp(战争)项目。 一个是jar(ehcache),另一个是战争依赖(我无法控制的第三方库)。
第三方战争依赖依赖于早期版本的 ehcache,这与我需要使用的更高版本冲突。
在我的应用打包期间将发生以下步骤。
- 我的 ehcache jar 被复制到/WEB-INF/lib/
- .war 依赖项(还包括 ehcache)构建并覆盖在我的目标之上
- 最终的 .war 文件是从目标创建的
无论我做什么,战争总是包括早期版本的 ehcache。 我什至尝试编写一个 ant 脚本,我通过 maven-antrun-plugin 执行该脚本,该脚本从目标目录中删除.jar文件。 但是,这总是在覆盖 .war 依赖项之前完成。
有谁知道我如何排除/删除早期版本的 ehcache?
您可能需要从覆盖层中按文件名排除 ehcache jar。 如果您尚未为依赖 war 声明显式覆盖,那么您也必须在 war 插件配置中执行此操作:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<overlays>
<overlay>
<groupId>your.thirdparty.war.groupId</groupId>
<artifactId>your.thirdparty.war.artifactId</artifactId>
<excludes>
<exclude>WEB-INF/lib/ehcache*.jar</exclude>
</excludes>
</overlay>
</overlays>
</configuration>
</plugin>
</plugins>
</build>
有关排除传递依赖项的更多信息:
在堆栈溢出时:排除单个依赖项的所有传递依赖项
在网络上(参考)http://www.sonatype.com/books/mvnref-book/reference/pom-relationships-sect-project-dependencies.html#pom-relationships-sect-transitive