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


首页传送门

目录
相关文章
|
13天前
|
缓存 Java Maven
【简单四步教你解决♥十分有效】Maven依赖报错、依赖或插件导入失败的万能解决办法
【简单四步教你解决♥十分有效】Maven依赖报错、依赖或插件导入失败的万能解决办法!在处理Maven项目问题时,首先检查Maven配置是否正确。接着通过“File--Invalidata Caches”清除IDEA缓存并重启。使用Maven命令`mvn dependency:purge-local-repository`和`mvn dependency:resolve`清除本地依赖缓存。最后,在Terminal中输入`mvn clean install`完成构建。
【简单四步教你解决♥十分有效】Maven依赖报错、依赖或插件导入失败的万能解决办法
|
5月前
|
Java Maven 容器
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
|
2月前
|
Java Maven
maven打瘦包,且只打入部分想打入的依赖瘦包
maven打瘦包,且只打入部分想打入的依赖瘦包 设计 工程结构分析 环境管理 城市资源 安全工程 工程管理
66 10
|
3月前
|
Java API Apache
除了 Maven,还有哪些工具可以管理项目的依赖和版本冲突
除了Maven,常用的项目依赖管理和版本冲突解决工具有Gradle、Ivy、Ant+Ivy、SBT等。这些工具各有特点,适用于不同的开发环境和需求。
216 2
|
3月前
|
XML 安全 Java
【Maven】依赖管理,Maven仓库,Maven核心功能
【Maven】依赖管理,Maven仓库,Maven核心功能
773 3
|
3月前
|
Java Maven
Maven 依赖管理
Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。
143 5
|
4月前
|
Java Maven
Maven 引入外部依赖
如果我们需要引入第三方库文件到项目,该怎么操作呢?
58 5
|
5月前
|
安全 Java Maven
优化Maven镜像配置:使用阿里云加速依赖下载
更新Maven镜像配置至关重要,尤其使用阿里云仓库时。在`settings.xml`中加入特定镜像配置可显著提升依赖下载速度。示例配置指定了阿里云镜像ID、替代表态仓库、安全的URL、默认布局及启用版本管理。需定位至用户目录下的`.m2/`文件夹编辑`settings.xml`,添加镜像信息后保存测试。若下载仍慢,考虑网络状况或备选镜像。多镜像设置时需注意避免冲突。
817 3
|
5月前
|
Java 测试技术 Maven
单元测试问题之在Maven项目中引入JUnit 5和Mockito的依赖如何解决
单元测试问题之在Maven项目中引入JUnit 5和Mockito的依赖如何解决
295 1
|
5月前
|
Java Maven
intellij idea如何查看项目maven依赖关系图
这篇文章介绍了如何在IntelliJ IDEA中查看项目的Maven依赖关系图,包括使用Maven工具栏和相关操作来展示和查看依赖细节。