依赖管理下

2023年 7月 14日 29.7k 0

依赖冲突

特殊优先

  • 特殊优先∶当同级配置了相同资源的不同版本,后配置的覆盖先配置的(提醒:要尽量避免这种没有意义的冲突)
  • 修改D:\java_projects\maven_A\pom.xml, 引入mysql5.1
  • 
    
        4.0.0
        com.wyx
        maven_A
        1.0-SNAPSHOT
        
            
            
                com.wyx
                maven_D
            
                1.0-SNAPSHOT
            
            
            
                com.wyx
                maven_B
                1.0-SNAPSHOT
            
            
                mysql
                mysql-connector-java
                5.1.47
            
            
            
                mysql
                mysql-connector-java
                5.1.43
            
        
    
    
    
  • 根据特殊优先原则: maven_A 生效的是mysql5.1.43
  • 在这里插入图片描述

  • 测试完后,注销到引入mysql5.1.43 , 这里是为了验证.
  • 可选依赖

    一句话: 可选依赖指对外隐藏当前所依赖的资源- 不透明

    举例说明

  • 需求: 隐藏maven_D 项目的junit 依赖,不让其他项目来使用
  • 修改D:\java_projects\maven_D\pom.xml
  • 
    
        4.0.0
        com.wyx
        maven_D
        1.0-SNAPSHOT
        
            
                junit
                junit
                4.13.2
                
                true
            
        
    
    
  • 刷新maven 管理器,看maven_A 的变化
  • 在这里插入图片描述

  • 测试完毕后,别忘了恢复原来状态.
  • 排除依赖

    一句话: 排除依赖指主动断开依赖的资源, 被排除的资源无需指定版本- 不需要

    举例说明

  • 需求: maven_A 项目主动排除maven_D 的junit4.13.2 这个依赖
  • 修改D:\java_projects\maven_D\pom.xml
  • 
    
        com.wyx
        maven_D
        1.0-SNAPSHOT
        
        
            
                junit
                junit
            
        
    
    
  • 刷新maven 管理器,看maven_A 的变化, 仍然是拿不到junti4.13.2, 提示: 再通过HelloTest.java 来验证实际使用的junit 版本, 更加清晰了.
  • 在这里插入图片描述

    可选依赖和排除依赖区别

    一句话: 隐藏依赖是不让其他项目来引用(我不给), 排除依赖是主动不要引入的某个资源(我不要)

    依赖范围

    作用范围

    一句话: 依赖的jar 默认情况可以在任何地方使用, 通过scope 标签设定其作用范围

    举例说明

    ● 作用范围说明

  • 主程序范围有效(src/main 文件夹范围内)
  • 测试程序范围有效(src/test 文件夹范围内)
  • 是否参与打包(package 指令范围内)
  • compile(默认,在主程序、测试代码、打包都有效)
  • ● 作用范围一览图

    在这里插入图片描述

    解读

  • 某个引入的jar 包作用范围是程序员根据,业务的实际需要来设置的,不要认为是固定的。
  • 比如log4j jar 包,在主程序,测试代码,打包都是需要的, 因此作用范围应当设置为complie
  • junit 只是测试代码需要,因此作用范围设置为test 合适,但是如果程序员认为在主程序和打包就是要junit, 仍然可以设置为默认compile
  • 比如servlet-api 是tomcat 自己带的,当把程序打包放到生产环境时,用生产环境tomcat 的servlet-api 即可,所以设置为provided 合适,这样就放在servlet-api 版本冲突.
  • 比如jdbc, 是第三方的jar , 打包放在生产环境,就应当在自己的包提供jdbc 驱动包,否则程序会因为少驱动包,运行失败
  • ● 看一个案例, 体会依赖范围的特点.

    
    
        4.0.0
        com.wyx
        maven_D
        1.0-SNAPSHOT
        
            
                junit
                junit
                4.13.2
                
                false
                
                test
            
        
    
    
  • 创建D:\java_projects\maven_D\src\test\java\T2.java, 在test 范围正常使用
  • import org.junit.Test;
    
    public class T2 {
        @Test
        public void f1(){
        }
    }
    
  • 创建D:\java_projects\maven_D\src\main\java\T1.java, 在主程序中,报错
  • 在这里插入图片描述

  • 修改D:\java_projects\maven_D\pom.xml, 发现主程序和测试程序都可以使用了.
  • false
    
    compile
    

    在这里插入图片描述

    在这里插入图片描述

  • 运行maven web 项目
  • 在这里插入图片描述

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论