0%

maven依赖

maven依赖

maven本身就是作为一个项目管理工具,管理项目中所依赖的jar包,所以maven的配置中存在了很多的依赖

1
2
3
4
5
6
7
8
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.2.1.RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>

依赖范围scope

依赖的范围有六种

  • compile 默认值,所有阶段均生效,打包
    • 对主程序是否有效(main):有效
    • 对测试程序是否有效(test):有效
    • 是否参与打包:参与
  • test 只在测试时使用,用于编译和运行测试代码,不会随项目发布
    • 对主程序是否有效:无效
    • 对测试程序是否有效:有效
    • 是否参与打包:不参与
  • provided 编译器有效,运行期不需要,不会打入包中
    只参与开发环节,部署运行时不需要,在服务器上存在,如servlet-api.jar
      - 对主程序是否有效:有效
      - 对测试程序是否有效:有效
      - 是否参与打包:不参与
  • runtime 编译不需要,运行期有效,需要打入包中
            运行时有效,编译时无效,如JDBC
  • system
            不从maven仓库获取,通过systemPath指定jar路径
  • import
            用于一个dependencyManagement对另一个dependencyManagement的继承

依赖原则

依赖的传递性 非compile范围的无法传递

依赖路径最短优先原则
项目依赖了两个jar包,其中A-B-C-D , A-D。由于第二条路径最短,所以项目使用的是第二个D。

pom文件中申明顺序优先
路径距离相同的情况下,先声明者优先,dependency的声明顺序

覆写优先
子pom内声明的优先于父pom中的依赖

依赖排除

有时候可能会出现依赖的版本冲突,此时需要将冲突的依赖排除掉,可以使用来进行依赖排除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.6.0</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>