着重基础之—构建工具—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模块管理和依赖冲突方面发挥作用。

  dependencyManagementdependencies正确的做法是:

  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

 

 

  

posted @ 2017-10-10 10:36  jerry-Tom  阅读(334)  评论(0编辑  收藏  举报