第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包。


首页传送门

目录
相关文章
|
存储 NoSQL Redis
6)深度解密 Redis 的集合(Set)
6)深度解密 Redis 的集合(Set)
295 1
|
安全 物联网 网络安全
智能家居安全:从风险分析到防护措施的全面指南
随着物联网技术的飞速发展,智能家居系统已逐渐走入千家万户。然而,智能化带来的便捷背后隐藏着不容忽视的安全风险。本文深入探讨了智能家居系统中存在的各类安全威胁,并提出了一套综合性的安全防护措施。文章不仅涵盖了技术层面的解决方案,还强调了用户在提升家居安全中的关键作用。通过案例分析,本文旨在为读者提供一份实用的智能家居安全指南,确保技术便利与个人隐私的双重保障。
|
算法 安全 Unix
常见加密算法介绍及比较
常见加密算法介绍及比较
980 0
|
机器学习/深度学习 数据采集 并行计算
【图像分类】——来来来,干了这碗EfficientNet实战(Pytorch)
【图像分类】——来来来,干了这碗EfficientNet实战(Pytorch)
1267 0
【图像分类】——来来来,干了这碗EfficientNet实战(Pytorch)
|
安全 前端开发 Java
SpringBoot之HiddenHttpMethodFilter
`HiddenHttpMethodFilter`在SpringBoot中的应用,极大地方便了开发者在HTML表单中使用PUT、DELETE等方法。通过本文的介绍,希望能够帮助开发者理解和配置 `HiddenHttpMethodFilter`,从而更好地利用SpringBoot的功能来实现复杂的HTTP请求操作。在实际应用中,注意安全性防护,确保系统的稳定和安全。
268 2
|
负载均衡 Java API
Spring Cloud是什么及基本特性都有哪些?
Spring Cloud 是用于构建健壮云应用的框架,包含多个子项目。其核心组件如Eureka(服务注册与发现)、Hystrix(熔断器)、Ribbon(负载均衡)等,帮助开发者快速实现微服务架构。Spring Cloud 提供了服务注册与发现、分布式配置、路由、断路器等功能,简化了微服务开发与管理。本文将重点介绍服务注册与发现及分布式配置两大特性。
778 5
|
设计模式 缓存 Java
重学Java基础篇—Java对象创建的7种核心方式详解
本文全面解析了Java中对象的创建方式,涵盖基础到高级技术。包括`new关键字`直接实例化、反射机制动态创建、克隆与反序列化复用对象,以及工厂方法和建造者模式等设计模式的应用。同时探讨了Spring IOC容器等框架级创建方式,并对比各类方法的适用场景与优缺点。此外,还深入分析了动态代理、Unsafe类等扩展知识及注意事项。最后总结最佳实践,建议根据业务需求选择合适方式,在灵活性与性能间取得平衡。
740 3
|
存储
数据结构(8)树形结构——B树、B+树(含完整建树过程)
8.1.B树 8.1.1.概述 B树存在的意义: 二叉树在存储数据时可能出现向一边倾斜导致查询效率降低的情况,为了防止二叉树的倾斜,出现了平衡二叉树,通过旋转的方式保证二叉树的平衡。但是就算是保持绝对的平衡,在面对要存储的数量量级够大的时候也会出现树的高度整体偏高的问题,树的高度过高,即使是使用了二分查找,依然会出现查找效率变低的情况。尤其是磁盘查找数据本身是个机械完成的动作,这一动作本身就十分耗时。因此需要一种能进行二分查找缩短查找时间,能存储大量数据后树高也不会过高的树形结构,这就是B树。
1314 0
|
SQL 关系型数据库 MySQL
SQL分页查询详解
分页查询是在数据库中检索数据的一种常见需求。它允许我们从大型数据集中获取有限数量的数据,以便于显示在应用程序的用户界面上。在本文中,我们将详细介绍SQL中的分页查询,包括基本语法、常见应用场景以及如何在不同数据库管理系统中执行分页查询。
2742 1
|
运维 监控 搜索推荐
阿里大鱼进行发短信业务---使用详细步骤-Java操作
这篇文章详细介绍了如何在Java中使用阿里大鱼服务来发送短信,包括开通短信服务、签名和模板管理,以及具体的Java开发步骤和代码示例。
1651 0
阿里大鱼进行发短信业务---使用详细步骤-Java操作

热门文章

最新文章

下一篇
开通oss服务