着重基础之—构建工具—Maven的依赖管理
着重基础之—构建工具—Maven的依赖管理
项目构建利器Maven给我们开发人员带来了极大的便利,从繁琐的jar包管理中脱身的程序员终于可以有时间再进入另一个坑了。
我今天要给大家分享的内容是我在实际开发中遇到的一个问题,Maven的依赖管理,以及冲突管理。相关内容其实网上已经有了很多,我在此记录,只是想强化下记忆。
依赖单元:Maven依赖是使用Maven坐标来定位的,而Maven坐标主要由GAV(groupId, artifactId, version)构成。最简单的依赖:
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.6</version> </dependency>
Pom.xml中,当我们管理多个Maven依赖模块时,dependencyManagement在解决多maven模块管理和依赖冲突方面发挥作用。
dependencyManagement 和 dependencies正确的做法是:
1. 在父模块中使用dependencyManagement配置依赖
2. 在子模块中使用dependencies添加依赖
dependencyManagement实际上不会真正引入任何依赖,dependencies才会。但是,当父模块中配置了某个依赖之后,子模块只需使用简单groupId和artifactId就能自动继承相应的父模块依赖配置。
来看一个例子:注意<dependencyManagement>和<dependencies>俩个配置节。
<dependencyManagement> <dependencies> <dependency> <!-- Import dependency management from Spring Boot --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.5.6.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <artifactId>spring-test</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.10.RELEASE</version> </dependency> </dependencies>
冲突的解决: 首先,如何定位冲突的位置,利用intelij idea工具来查看引入jar包的依赖图谱:
(1)打开pom.xml文件;
(2)在pom文件内部点击右键;
(3)选择Diagrams(或紧挨着下面的maven)–Show Dependencies;
(4)这时就可以看到maven依赖图了,但此时的图只是一个缩略图(放大,就可以看到详细的依赖关系了)。
定位了冲突后,就可以通过依赖排除来排除冲突依赖,我们来看个示例:
依赖排除的解释:任何可传递的依赖都可以通过 "exclusion" 元素被排除在外。举例说明,A 依赖 B, B 依赖 C,因此 A 可以标记 C 为 “被排除的”。
<dependency> <groupId>com.test.rose.perfcounter</groupId> <artifactId>test-rose-perfcounter</artifactId> <version>${test-common-version}</version> <exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>spring-webmvc</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency>
Maven的学习资料站点:http://wiki.jikexueyuan.com/project/maven/manage-dependencies.html