zoukankan      html  css  js  c++  java
  • 第4章 maven依赖特性

    第4章 maven依赖特性

    本章详细介绍maven的依赖特性和依赖范围,如何排除依赖。

    4.1 什么是依赖传递

    举个例子
    在非maven项目中,你需要使用spring功能,你会想到导入spring的jar包,那么,srping又需要其他依赖jar包支持,所以你又需要去导入其他jar包,多次反复尝试启动项目后,你终于成功了!
    maven项目就不需要这么麻烦,你只要在pom.xml文件中,引入spring相关配置,那么他会自动引入其他依赖jar包,这就是maven的依赖传递。

    Alt text

    以下是一个配置文件,仅引入了spring和junit两个依赖配置,但maven已自动导入了其他的jar包

    
    <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.group</groupId>
      <artifactId>simple</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>simple</name>
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <org.springframework-version>3.1.0.RELEASE</org.springframework-version>
      </properties>
    
      <dependencies>
    
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
    
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </project>
    
    

    Alt text

    4.2 依赖特性的特点

    4.2.1 依赖范围

    什么是依赖范围?
    依赖范围指:决定依赖特性在构建的哪个阶段起作用。
    举个例子,我需要做junit测试,所以需要引入junit相关jar,但我在发布项目时,我又不需要这个jar,所以(你有这个需求,maven肯定有这个解决办法),在配置时,需要指定依赖的范围。

    在配置依赖时,scope标签就是用来规范依赖范围。

    Alt text

    范围描述
    compile 默认值,适用于所有阶段,会随着项目一起发布。
    provided 类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
    runtime 只在运行时使用,如JDBC驱动,适用运行和测试阶段。
    test 只在测试时使用,用于编译和运行测试代码。不会随项目发布。
    system 类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。

    4.2.2 排除依赖

    因为maven的依赖传递特性,所以很有可能一些你不需要的依赖也会包含在工程类路径中,为了解决这种情况,maven已经引入了依赖排除概念。

    1. 如何使用排除依赖
    在pom.xml文件中,<dependency>标签中加上<exclusions>标签

    
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.5.1</version>
        <exclusions>
            <exclusion>
                <groupId>tomcat</groupId>
                <artifactId>jasper-runtime</artifactId>
            </exclusion>
            <exclusion>
                <groupId>tomcat</groupId>
                <artifactId>jasper-compiler</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
    

    例如以上代码,在使用hadoop-common时,排除掉jasper-runtime, jasper-compiler两个依赖jar。

    2.使用通配符进行依赖排除
    有的时候,依赖过多,我们不需要一个个的去排除,可使用通配符来实现

    <dependency>
        <groupId>org.apache.phoenix</groupId>
        <artifactId>phoenix-core</artifactId>
        <version>4.5.0-HBase-1.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>*</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    例如以上代码,排除groupId 是org.mortbay.jetty的所有jar包。


    首页传送门

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    一些智力题
    17分钟过桥问题
    快排的非递归实现
    单链表逆置
    实现所有括号的合法匹配
    2013阿里笔试题
    Hadoop学习笔记—14.ZooKeeper环境搭建
    Hadoop学习笔记—15.HBase框架学习(基础知识篇)
    Hadoop学习笔记—13.分布式集群中节点的动态添加与下架
    Hadoop学习笔记—11.MapReduce中的排序和分组
  • 原文地址:https://www.cnblogs.com/jdbc/p/4975491.html
Copyright © 2011-2022 走看看