依赖配置:依赖指当前项目运行所需的jar,一个项目可以有多个依赖。
格式:
<!--设置当前工程的所有依赖--> <dependencies> <!-- 具体的依赖--> <dependency> <!-- 依赖所属群组id--> <groupId>junit</groupId> <!-- 依赖所属项目id--> <artifactId>junit</artifactId> <!-- 版本号--> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
依赖传递
依赖传递是指一个项目所依赖的jar包或其他项目有其所依赖的jar包或项目,则该项目可以使用其所依赖的jar包或其他项目有其所依赖的jar包或项目并可以向下追溯,这些jar包或项目为该项目的间接依赖。
依赖具有传递性:
直接依赖:在当前项目中通过依赖配置建立的项目关系。
间接依赖:被依赖的资源如果依赖其它资源,当前项目间接依赖其他资源。
(直接依赖和间接依赖是相对概念。)
依赖传递所存在的问题:
如果当前项目与其所依赖的jar包或项目依赖同一个资源,但版本不同。如此会使用那个资源?
路径优先:当依赖中出现相同资源时,层级越深,优先级越低,层级越浅,优先级越高。
声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的。(间接依赖)
特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的。(直接依赖)
可选依赖:指对外隐藏当前所依赖的资源——不透明。(即当有项目将当前项目作为依赖时,当前项目的可选依赖将不显示,但仍作为该项目的简介依赖。)
方式:在相应的<dependency>标签中添加<optional>标签,值为true。记得要删除版本号<version>。
<!-- 具体的依赖--> <dependency> <!-- 依赖所属群组id--> <groupId>junit</groupId> <!-- 依赖所属项目id--> <artifactId>junit</artifactId> <optional>true</optional> <scope>test</scope> </dependency>
排除依赖:指主动断开所依赖的资源,被排除的资源无需指定版本——不需要(若A项目依赖B项目,B项目依赖junit包,则A项目可以主动断开A项目与junit包的间接依赖关系。)
方式:在配置项目依赖的<dependency>标签中添加 <exclusions> <exclusion> <groupId>???</groupId> <artifactId>???</artifactId> </exclusion> </exclusions>。
<dependency> <groupId>com.itheima</groupId> <!-- 项目id--> <artifactId>web01</artifactId> <!-- 版本号:release(完成版),snapahot(开发版)--> <version>1.0-SNAPSHOT</version> <exclusions> <exclusion> <groupId>junit</groupId> <artifactId>junit</artifactId> </exclusion> </exclusions> </dependency>