如何防止jar中的类重叠到maven

时间:2017-07-26 18:17:07

标签: java maven maven-plugin

我有一个名为A的maven项目,它依赖于另一个名为B.jar的jar文件,A和B.jar具有相同的类但具有不同的版本。在maven构建期间,B.jar中的类总是在A中重叠。让maven只接受A中的类而不是B的方法是什么?

1 个答案:

答案 0 :(得分:3)

我认为你对Maven模块有一个真正的概念问题。

当JAR被另一个JAR使用时,JAR不会被排除在外。

为什么在B JAR中,您是否提供了一种在运行时选择要使用的实现类的方法? 您可以通过多种方式允许它:属性,实现的接口等.... 通过这种方式,您可以指定要在客户端应用程序中使用的类 您应该考虑使用API​​来实现客户端类,而不是覆盖类。

这并不意味着你不能用Maven做到这一点,但它似乎错综复杂,不自然,容易出错,设计不好。
以下是使用Maven解决问题的一些想法。

您可以配置maven-jar-plugin以指定要在打包的jar中排除的类:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.0.2</version>
    <configuration>
      <excludes>
        <exclude>a.b.c.MyclassToExclude.java</exclude>
      </excludes>
    </configuration>
  </plugin>

Here是参考文档。

但通过这样做,无论如何都不会在JAR中提供课程 如果在B中需要替换类,则会使B JAR无法单独工作。

您可以使用specific classifier打包JAR以避免此问题 您将拥有包含所有内容的经典jar和包含此着名重复类的所有内容的jar-for-a。

但实际上,我认为你应该考虑一下你的设计。