如何从被 maven 依赖项覆盖的战争中删除.jar文件



我有一个有2个依赖项的maven3 webapp(战争)项目。 一个是jar(ehcache),另一个是战争依赖(我无法控制的第三方库)。

第三方战争依赖依赖于早期版本的 ehcache,这与我需要使用的更高版本冲突。

在我的应用打包期间将发生以下步骤。

  1. 我的 ehcache jar 被复制到/WEB-INF/lib/
  2. .war 依赖项(还包括 ehcache)构建并覆盖在我的目标之上
  3. 最终的 .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

最新更新