如何使用apache-maven-shade插件解决多依赖项冲突

gblwokeq  于 2023-01-01  发布在  Maven
关注(0)|答案(1)|浏览(215)

Maven shade plugin在解决依赖关系冲突方面非常强大,但我遇到的情况如下:
我的项目

  • Guava31
  • 第三方依赖-1
  • Guava18

我可以重新定位Guava31依赖关系,然后冲突就会解决。下面的情况如何?
我的项目

  • 第三方-1
  • Guava31
  • 第三方-2
  • Guava18
  • 第三方-3
  • Guava4

或者,如果有两个以上的依赖项作为同一依赖项但版本不同而发生冲突,该怎么办?
如果我使用relocation,那么thirdparty-1/guava 31将被重新定位,但是guava 18和guava 4仍然冲突。
我不知道该怎么处理这种情况。

o0lyfsai

o0lyfsai1#

您需要在整个项目中消除这些冲突,而不仅仅是阴影的uber-jar。
pom.xml声明中使用Maven <exclusions>来实现这一点。
例如:

<dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j</artifactId>
        <version>${neo4j.version}</version>
        <exclusions>
            <exclusion>
                <groupId>io.netty</groupId>
                <artifactId>netty-transport-native-epoll</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-transport-native-epoll</artifactId>
        <version>${netty.version}</version>
    </dependency>

相关问题