maven中有重复依赖该怎么搞

在开发过程中,可能不可避免地都遇到过依赖版本重复,导致运行出现问题的情况,如果你遇到过,建议你看看,如果你还没遇到过,更建议你看看。

在我们项目结构比较小的时候,可能只有一两个pom文件,通过肉眼就能看到有没有重复依赖项,但是当我们的项目开发越来越庞大,除了自己引入的依赖,还有一些通过第三方库间接引入的依赖,一旦出现依赖冲突,并且版本不一致时,很有可能会导致我们的项目在运行时出现问题。

本期内容,主要包括以下内容:

  • 如何快速检查pom中的重复依赖项
  • 如何在构建时有重复依赖强制失败

为什么要检测重复依赖关系

如果在pom中有重复依赖,有一个主要的风险点,就是在我们构建时,可能高版本的依赖不会构建在我们项目中。

例如有以下pom.xml:

<project>
    <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.11</version>
        </dependency>
    </dependencies>
</project>
复制代码

引入了commons-lang3的两个依赖项,并且版本不同。接下来,让我们看看如何使用Maven命令来检测这些重复依赖项。

dependency:tree命令

通过终端运行命令mvn dependency:tree并查看输出。

从日志中我们可以看到,有warning日志提示存在重复依赖项(标注1处);并且最后构建到项目中的是3.11版本(标注2处),是因为maven在选择依赖项时会选择最后一个。

dependency:analyze-duplicate 命令

接下来我们通过命令dependency:analyze-duplicate来检查重复依赖项:

从结果看,同样会在WARNING日志中打印重复依赖项,并且在INFO日志中会列出重复依赖的jar。

有重复依赖强制构建失败

在上文中,我们了解到如何检测重复依赖项,但构建仍然会成功,这可能会导致使用的jar包版本不正确。

我们可以使用maven enforcer插件,如果存在重复的依赖项,可以确保构建不成功。

需要先将maven enforcer插件添加到pom.xml中,并添加一个规则banDuplicatePomDependencyVersions:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <id>no-duplicate-declared-dependencies</id>
                    <goals>
                        <goal>enforce</goal>
                    </goals>
                    <configuration>
                        <rules>
                            <banDuplicatePomDependencyVersions/>
                        </rules>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
复制代码

接下来我们进行验证:

可以看到构建失败。

一旦我们确定了重复的依赖项,我们就可以在pom.xml文件中删除,保留我们需要的依赖。

小结

在本期内容中,主要讲述如何使用mvn dependency:tree和mvn dependency:analyze-duplicate命令检测maven中的重复依赖项。

我们还了解了如何使用maven enforcer插件通过内置规则来使包含重复依赖项的应用构建失败。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值