MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

Maven检测JAR包冲突及处理方法

2025-01-01 20:12 huorong 精选文章 3 ℃ 0 评论

1.背景

项目中经常遇到jar包冲突的问题,通常的都是遇到冲突后再去检查,很被动。

本质:是项目中出现多个版本的jar包,项目启动时哪个jar包先加载具有随机性,可能测试环境正常线上会失败,可能今天发布正常某一次突然发布失败。

表象:一般是“ java.lang.NoSuchMethodError:

即使是通过 mvn dependency:tree -Dverbose 也只能是从jar层面自己分析是否有冲突;

如何提前检测,如何准确定位到具体类在哪个jar包中存在冲突,这才是解决问题的根本。

2.方法

现推荐一款maven插件maven-enforcer-plugin可以具体定位到哪些类有冲突,在哪些jar包中有冲突。

3.使用

3.1 在pom.xml文件build标签中添加如下代码

根据自己代码视情况添加:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>1.1.1</version>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>extra-enforcer-rules</artifactId>
            <version>1.0-alpha-4</version>
        </dependency>
    </dependencies>

    <configuration>
        <rules>
            <bannedDependencies>
                <searchTransitive>true</searchTransitive>
            </bannedDependencies>
            <evaluateBeanshell>
                <condition>print("[INFO] [Alibaba Enforcer Rules] parent-pom ");1==1</condition>
            </evaluateBeanshell>
            <banDuplicateClasses>
                <findAllDuplicates>true</findAllDuplicates>
                <message>[ERROR] [Alibaba Enforcer Rules] find DuplicateClasses</message>
            </banDuplicateClasses>
        </rules>
    </configuration>
</plugin>

3.2 在对应项目根目录执行一下maven命令

如下:

mvn enforcer:enforce

冲突较多单屏无法显示完整时可以重定向到某文件中,如下:

mvn enforcer:enforce > conflict.txt

3.3 实例

如图:

Duplicate classes:显示的是重复的类

Found in:显示的是重复的类所在的jar包。

3.4 采取措施

最终针对性的对一些多余的jar包进行排除,从根源上解决jar包冲突问题,如下:

<dependency>
    <groupId>com.ximalaya.ops</groupId>
    <artifactId>auth-data-filter</artifactId>
    <version>${xmly.ops.version}</version>
    <exclusions>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Tags:mvn dependency

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言