您当前的位置: 首页 >  ar

止步前行

暂无认证

  • 0浏览

    0关注

    247博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Maven之jar包冲突&引入非第三方jar

止步前行 发布时间:2022-04-09 10:36:39 ,浏览量:0

文章目录
  • 1. jar包冲突问题
  • 2. 解决办法
    • 2.1 Maven Helper插件
      • 2.1.1 安装 Maven Helper 插件
      • 2.1.2 pom.xml 依赖冲突分析
        • 2.1.2.1 打开依赖分析界面
        • 2.1.2.2 查看冲突分析结果
    • 2.2 Maven 的 enforcer 插件
      • 2.2.1 引入 netty 依赖
      • 2.2.2 配置 enforcer 插件
      • 2.2.3 测试
  • 3. 引入非Maven jar包
    • 3.1 将该 jar 包安装到 Maven 仓库

1. jar包冲突问题

在日常开发中,团队中每个程序员都需要自己去找依赖,即使是做同一个项目,每个模块也各加各的依赖,没有统一管理。但一旦依赖确定下来,把这些依赖放在父工程中做依赖管理,各个子模块各取所需,这样基本上就能很好的避免问题的扩散。

2. 解决办法

不管具体使用的是什么工具,基本思路无非是这么两步:

  • 把彼此冲突的 jar 包找到
  • 在冲突的 jar 包中选定一个,具体做法无非是通过 exclusions 排除依赖,或是明确声明依赖。
2.1 Maven Helper插件

这个插件是 IDEA 中安装的插件,不是 Maven 插件。它能够罗列出来同一个 jar 包的不同版本,以及它们的来源,但是对不同 jar 包中同名的类没有办法。

2.1.1 安装 Maven Helper 插件

在这里插入图片描述

装完要重启Idea

2.1.2 pom.xml 依赖冲突分析 2.1.2.1 打开依赖分析界面

在这里插入图片描述

注意:这个功能需要安装了 IDEA Maven helper 插件才有。

2.1.2.2 查看冲突分析结果

在这里插入图片描述

2.2 Maven 的 enforcer 插件

使用 Maven enforcer 插件既可以检测同一个 jar 包的不同版本,又可以检测不同 jar 包中同名的类。

2.2.1 引入 netty 依赖

这里引入两个对 netty 的依赖,展示不同 jar 包中有同名类的情况。


    
        org.jboss.netty
        netty
        3.2.10.Final
    
    
        io.netty
        netty
        3.9.2.Final
    

2.2.2 配置 enforcer 插件

    
        
            
                org.apache.maven.plugins
                maven-enforcer-plugin
                1.4.1
                
                    
                        enforce-dependencies
                        validate
                        
                            display-info
                            enforce
                        
                    
                
                
                    
                        org.codehaus.mojo
                        extra-enforcer-rules
                        1.0-beta-4
                    
                
                
                    
                        
                            true
                        
                    
                
            
        
    

2.2.3 测试

执行如下 Maven 命令:mvn clean package enforcer:enforce 部分运行结果:

[INFO] --- maven-enforcer-plugin:1.4.1:enforce (default-cli) @ pro32-duplicate-class ---
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.BanDuplicateClasses failed with message:
Duplicate classes found:

Found in:
io.netty:netty:jar:3.9.2.Final:compile
org.jboss.netty:netty:jar:3.2.10.Final:compile
Duplicate classes:
org/jboss/netty/channel/socket/ServerSocketChannelConfig.class
org/jboss/netty/channel/socket/nio/NioSocketChannelConfig.class
org/jboss/netty/util/internal/jzlib/Deflate.class
org/jboss/netty/handler/codec/serialization/ObjectDecoder.class
org/jboss/netty/util/internal/ConcurrentHashMap$HashIterator.class
3. 引入非Maven jar包

Maven 工程中用到的 jar 包通常都是通过 Maven 本身的机制导入进来的,而实际开发中确实有可能用到一些 jar 包并非是用 Maven 的方式发布,那自然也没法通过 Maven 导入。

3.1 将该 jar 包安装到 Maven 仓库

使用 install 插件的 install-file 目标:

mvn install:install-file -Dfile=[体系外 jar 包路径] \
-DgroupId=[给体系外 jar 包强行设定坐标] \
-DartifactId=[给体系外 jar 包强行设定坐标] \
-Dversion=1 \
-Dpackage=jar

例如(Windows 系统下使用 ^ 符号换行;Linux 系统用 \):

mvn install:install-file -Dfile=D:\idea\maven-outer\maven-outer.jar ^
-DgroupId=com.scorpios.maven ^
-DartifactId=maven-outer ^
-Dversion=1 ^
-Dpackaging=jar

执行完上述命令后,会把非Mavenjar安装到本地仓库中,并会生成相应的pom文件,这样就可以在Maven项目中进行引入

关注
打赏
1657848381
查看更多评论
立即登录/注册

微信扫码登录

0.0373s