zoukankan      html  css  js  c++  java
  • maven的包冲突

      maven的间接引用会引入其他未声明的包,maven自身的冲突解决方案,最终引用的包可能不是希望的版本。

      

      直接声明期望的版本号,就没有间接引用的问题。

      子模块很多时,可以使用dependencyManagement在父模块中统一管理。

      父模块中配置:

    <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                    <version>1.2.3.RELEASE</version>
                </dependency>
            </dependencies>
    </dependencyManagement>

      子模块则无需指定版本信息:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

      dependencyManagement中定义的只是依赖的声明,并不实现引入,因此子项目需要显式的声明需要用的依赖。

      发生ClassNotFoundException等包冲突的引起的问题时,可以如下解决:

      intellj中Reimport,会重新下载对应的包,解决IDE缓存的问题。

      

      还是存在冲突时,mvn dependency:tree命令,查看间接引入的来源。

      mvn dependency:tree >tree.txt,使用该命令将结果重定向到tree.txt中,方便查看。

      

      mvn dependency:tree找到是哪个模块的哪个包间接引入了版本有问题的包,使用exclusion切断引用关系。 

    <dependency>  
        <groupId>org.unitils</groupId>  
        <artifactId>unitils-dbmaintainer</artifactId>  
        <version>${unitils.version}</version>  
        <exclusions>   
            <exclusion>  
                <artifactId>asm</artifactId>  
                <groupId>asm</groupId>  
            </exclusion>  
        </exclusions>  
    </dependency>
  • 相关阅读:
    (win10 64位系统中)Visual Studio 2015+OpenCV 3.3.0环境搭建,100%成功
    flutter环境搭建
    并发
    java集合继承关系图
    java中反射的使用
    android使用http3
    java之结合代码理解synchronized关键字
    阿里云ECS服务器将默认的Ubuntu系统改成桌面版
    python之demo2----改编自python官方提供的turtle_yinyang.py画阴阳的demo
    python之demo1----改编自turtle.py文件中的demo
  • 原文地址:https://www.cnblogs.com/lnlvinso/p/8982869.html
Copyright © 2011-2022 走看看