Maven依赖(一)

POM.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.yuxl.test</groupId>
  <artifactId>user</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>user</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
     ....
  </dependencies>


</project>

坐标:

groupId,artifactId,version,packaing,classifier

groupId:当前Maven项目隶属的项目,必须的;
artifactId:项目中的模块,必须的;
version:版本,必须的;
packaging:maven项目的打包方式,默认为jar;
classifier:不能直接定义,由插件帮助生成的(不是太理解)。

依赖配置

......
<dependencies>
      <dependency>
      <groupId>???</groupId>
      <artifactId>???</artifactId>
      <version>???</version>
      <scope>???</scope>
      <optional>???</optional>
      <exclusions>
          <exclusion>
              ...
          </exclusion>
      </exclusions>
    </dependency>
</dependencies>
......
  1. groupId,artifactId,version:依赖性的坐标
  2. type:依赖类型,默认为jar
  3. scope:依赖范围
  4. optional:依赖是否可选
  5. exclusions:排除传递依赖

    依赖范围(scope)

    (三种classpath:编译classpath、测试classpath、运行classpath)

    • compile:编译依赖范围,默认。对编译、测试、运行都有效
    • test:测试依赖范围,只对测试classpath有效,只有在编译test代码和运行test代码才有效(如:junit)
    • provided:提供依赖范围,编译和测试classpath有效,运行时无效(如:servlet-api,因为有容器提供,不需要重复引入了)
    • runtime:运行时依赖范围,对于测试和运行classpath有效,在编译主代码时无效(如:jdbc驱动)
    • system:系统依赖范围,与三种classpath有关。(不是太理解,好像跟本机系统绑定,本地的,maven仓库以外的类库)
    • import:导入依赖范围(dependencyManagement)

      scope 编译classpath 测试classpath 运行classpath
      compile y y y
      test n y n
      provided y y n
      runtime n y y
      system y y n


    依赖传递性

    如果:A ⇒B,B⇒C(A依赖于B,B依赖于C)
    那么:A⇒C(A依赖于C)

    依赖原则

    1. 路径最近者优先
    2. 第一声明者优先
    3. 和版本的大小无关
      如:

      依赖关系 结果 备注
      A ⇒D⇒C1,B⇒C2 C2 B的路径比A短
      A ⇒C1,B⇒C2 C1 A声明在B前面


    可选择性

    (一般不用optional,因为一般对象设计中,有单一责任的原则,即一个类只做一项事,不要糅杂太多的功能)
    如果:A ⇒B,B⇒X或者Y(A依赖于B,B依赖于X或者Y(可选的))使用了

    ```
        <optional>true</optional>
    ```
    

    而A依赖B,可是B中有可选的X,Y,所以需要在A中显示声明下,到底用X,还是Y(即把B中的X或者Y其中一个copy过来,将<optional<true</optional>删除)。

    排除依赖

    在<exclusions<true</exclusions>中加上要排除的依赖

    扫描二维码关注公众号,回复: 3798367 查看本文章
    <dependency>
    ......
         <exclusions>
            <exclusion>
                <groupId>???</groupId>
                <artifactId>???</artifactId>
            </exclusion>
         </exclusions>
    </dependency>


    归类依赖

    说白了,就是定义了一些变量,方便重复使用。(以后修改一处即可)

    ...
    <properties>
        <springframework.version>3.0</springframework.version>
    </properties>
    ...
    <dependencies>
          <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${springframework.version}</version>
        </dependency>
    </dependencies>

    优化依赖

    查看当前项目中已经解析的依赖:
    mvn dependency:list
    mvn dependency:tree

推荐一本书籍:《maven实战》作者:许晓斌 《maven 3 in action》 作为入门和基础学习很不错的。

猜你喜欢

转载自blog.csdn.net/u011622109/article/details/52107014