Maven依赖的范围/作用域

依赖的基本元素

一个dependency的声明可以包含以下元素:


    
        org.apache.kafka
        kafka-clients
        0.8.2.2
        compile
        false 可选依赖就是optional标签,默认false。
     排除依赖
        
            
                org.apache.zookeeper
                zookeeper
            
        
    

  • groupId+artifactId+version构成了依赖的基本坐标,Maven根据坐标才能找到依赖。
  • scope定义了依赖的范围,默认是compile。
  • optional定义了是否为可选依赖,默认是false。
  • exclusion用来排除传递性依赖。

范围或作用域

  • compile:编译依赖范围,使用此依赖范围对于编译、测试、运行三种classpath都有效,即在编译、测试和运行时都要使用该依赖jar包;
  • test:测试依赖范围,只对测试有效,表明只在测试的时候需要,在编译和运行时将无法使用该类依赖,如 junit;
  • provided:已提供依赖范围。编译和测试有效,运行无效。如servlet-api,在项目运行时,tomcat等容器已经提供,无需Maven重复引入;
  • runtime:运行时依赖范围。测试和运行有效,编译无效。如 jdbc 驱动实现,编译时只需接口,测试或运行时才需要具体的 jdbc 驱动实现;
  • system:系统依赖范围,使用system范围的依赖时必须通过systemPath元素显示地指定依赖文件的路径,不依赖Maven仓库解析,所以可能会造成建构的不可移植,谨慎使用。
  • import: 等同于parent标签,在parent被占用时,引入父依赖用
    示例,spring cloud的依赖就这样引入,因为父依赖已经被占用
  
        org.springframework.boot
        spring-boot-starter-parent
        2.1.9.RELEASE
         
    

/省略其他配置......

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
  

你可能感兴趣的:(Maven依赖的范围/作用域)