maven首页投稿(暂停使用,暂停投稿)技术文

maven---5依赖

2016-11-17  本文已影响278人  zlcook

1.依赖声明

<project>
  <dependencies>
    ...
    <dependency>
      <groupId>...</groupId>
      <artifactId>...</artifactId>
      <version>...</version>
      <type>...</type>
      <scope>...</scope>
       <optional>...</optional>
        <exclusions>
           <exclusion>
            ...
            </exclusion>
         </exclusions>
    </dependency>
     ...
  </dependencies>
</project>

大部分依赖声明只包含基本坐标,然而在一些特殊情况下,其他元素至关重要。

2.依赖范围

maven依赖范围就是用来控制依赖与这三种classpath(编译classpath、测试classpath、运行classpath)的关系。
编译classpath:编译主代码有效
测试classpath:编译、运行测试代码有效
运行classpath:项目运行时有效

<dependency>
      <groupId>javax.sql</groupId>
      <artifactId>jdbc-stdext</artifactId>
      <version>2.0</version>
      <scope>system</scope>
      <systemPath>${JAVA_HOME}/lib/rt.jar</systemPath>
    </dependency>

3.依赖传递

假设A依赖与B,B依赖与C,则A对于B是第一直接依赖,B对于C是第二直接依赖,A对于C是传递性依赖。第一直接依赖的范围和第二直接依赖的范围决定了传递性依赖的范围。如下表,最左边是第一直接依赖范围,上面是第二直接依赖范围,中间交叉单元格表示传递性依赖范围。

第一直接依赖\第二直接依赖 compile test provided runtime
compile compile - - runtime
test test - - test
provided provided - provided provided
runtime runtime - - runtime

4.依赖优先

当C依赖A和B后,如果A和B的依赖中存在相同的依赖,那么C会依赖A中传递性依赖还是B中的传递性依赖呢?在maven中有两个原则来解决这一问题,第一原则解决不了才会使用第二原则。
C->A
C->B

A和B对于E的依赖情况
A->M(1.2)->E(1.3)
B->E(1.5)
C对于E的依赖情况。
C->A,B =>C->E1.5
C->B,A =>C->E1.5

C->A,B =>C->D(1.2)
C->B,A =>C->D(1.3)

5.可选依赖

6.排除依赖

传递性依赖会给项目引入很多依赖,简化项目依赖管理,但是也会带来问题

       <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>3.6.10.Final</version>
              <exclusions>
                <exclusion>
                    <groupId>slf4j-api</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
             </exclusions>
         </dependency>  
         <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.12</version>
         </dependency>  

7.归类依赖

<project>
....
 <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <springframework.version>4.3.2.RELEASE</springframework.version>
  </properties>

  <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${springframework.version}</version>
      </dependency>
      <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-beans</artifactId>
           <version>${springframework.version}</version>
       </dependency>
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-core</artifactId>
           <version>${springframework.version}</version>
       </dependency> 
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-web</artifactId>
           <version>${springframework.version}</version>
       </dependency>
  </dependencies>
  ...
</project>

8.优化依赖

8.1查看已解析依赖

iqasweb项目的所有已解析依赖,有省略

8.2 查看依赖树

查看iqasweb项目依赖树

8.3分析依赖树

*分析命令:mvn dependency:analyze

分析依赖
上一篇下一篇

猜你喜欢

热点阅读