依赖管理

  • 依赖配置
  • 依赖传送
  • 依赖具有传递性
  • 直接依赖与间接依赖
  • 依赖冲突
  • 可选依赖
  • 排除依赖
  • 依赖范围



依赖配置

依赖指的是当前项目所需要的jar包,在 pom.xml 中可以看到

<!--设置当前项目所依赖的所有jar包-->
<dependencies>
	<!--设置一个具体的依赖jar-->
  	<dependency>
		<!--依赖所属群组id-->
	    <groupId>junit</groupId>
	    <!--依赖所属项目id-->
	    <artifactId>junit</artifactId>
    	<!--依赖版本号-->
    	<version>3.8.1</version>
	</dependency>
</dependencies>

依赖传送

依赖具有传递性

1、你的项目中的依赖可能依赖于别的资源,而这种依赖关系不需要你去管理,而是你的依赖会自动对其依赖进行管理;

2、你的项目依赖了同事的资源,同事的资源的依赖你不需要管理,当同时项目更新时你依赖同时的资源会自动更新依赖;


直接依赖与间接依赖

直接依赖: 当前项目中通过依赖配置建立的依赖关系;
间接依赖: 被依赖的资源,依赖于别的资源,别的资源都为间接依赖。

直接依赖与间接依赖都是相对概念:

java中selenium依赖包 java 依赖包管理_jar


java中selenium依赖包 java 依赖包管理_java_02

依赖冲突

路径优先原则: 当依赖中出现相同资源时,层级越深,优先级越低(间接<直接);
声明优先原则: 当资源在相同层级被依赖时,配置顺序越靠前覆盖配置顺序靠后的;
特殊优先原则: 当一个pom里配了俩,后面的覆盖前面的;


可选依赖

隐藏自己使用的依赖,对外不透明;

<optional>true</optional>

排除依赖

主动将间接依赖资源断开

示例代码为将依赖资源 web01 中排除 log4j 依赖;

<dependency>
  <groupId>com.xuhongduo</groupId>
  <artifactId>web01</artifactId>
  <version>1.0-SNAPSHOT</version>
  <exclusions>
    <exclusion>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
    </exclusion>
  </exclusions>
</dependency>

依赖范围

每个 jar 添加成依赖以后都有一个依赖范围可以设定:
1、主程序范围 main
2、测试范围 test
3、是否参与打包

依赖范围有四个可选项:

1、compile

<scope>compile</scope>

在主代码,测试代码,打包范围都可以用;比如用于记录日志的 log4j,在主程序,测试,打包时候都要用到。
若不设置 scope,默认为 compile

2、test

<scope>test</scope>

只用于测试的不参与打包和主程序;比如 junit

3、provided

<scope>provided</scope>

不参与打包,参与主程序和测试,因为打包上去会因为版本冲突而产生错误,比如 servlet-api;

4、runtime

<scope>runtime</scope>

只参与打包,比如jdbc;