3. Maven依赖

Maven坐标详解

fastjson坐标

<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.78</version>

工具包坐标

<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.7</version>

groupId

定义当前项目隶属的实际项目。groupId的定义类似于包名的定义,一般是到域名的方式后面跟实际项目名。倒域名可以指定项目的所属组织或公司,实际项目名则指定项目的真实名称。

例如:cn.hutool

artifactId

定义实际项目中的一个Maven模块,一般命名方式为实际项目名作为前缀,后面是模块名

例如:hutool-all

version

定当前maven项目所处的版本

packaging

定义maven项目的打包方式,一般有三种,分别是jarwarpom。打包方式一般对应于打包后文件的扩展名。如果不指定,默认为jar

classifier

定义构件输出的一些附属构件。不能直接定义项目的classifier,是由插件帮助生成。最为典型的例子就是javadocsources

查找某个模块的坐标

技巧:直接在百度中输入maven后面跟你想查找的jar的名字就可以了

依赖范围详解

maven有一个非常重要的功能,就是解决项目的依赖,曾经我们在使用手动导包时,需自己解决依赖问题,小项目处理起来还好,大型项目中的依赖非常多,很难捋清楚依赖,易出现jar包冲突找不到jar的问题。maven可以帮我们很轻松解决此类问题。

引入依赖

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.7</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.3.4.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.41</version>
    <scope>runtime</scope>
  </dependency>
</dependencies>

学习依赖范围需弄明白三件事:

为什么需要指定依赖范围

以junit为例,我们只希望在测试的时候使用,编译或运行项目的时候我们并不想引入junit的依赖,需要如何做?

以mysql驱动为例,我们只希望在测试和运行的时候引入依赖,开发中防止使用错类不想引入,需要如何做?

以seeervlet-api为例,我们只希望在编译和测试的时候使用,运行的时候并不想引入依赖,需要如何做?

依赖范围有哪些

名称

说明

compile

编译、测试、运行都有效

test

测试有效

provided

编译、测试有效,运行无效

runtime

编译无效、测试和运行有效

system

编译、测试有效,运行无效

import

特殊

依赖范围实现的原理

定义多套classpath,编译时是一套classpath,测试时是一套classpath,运行时是一套classpath。根据scope属性值来判断是否进行加载jar

依赖的传递

Maven的依赖传递也是一个非常重要的特性。例如,A依赖BB依赖C,那么A也依赖C

注:依赖的传递既然能带来好处,同时也会带来一些问题

问题1:

A -> B -> C -> D(1.0)

A -> E -> D(2.0)

A会依赖D的哪一个版本?

maven会选择路径最浅的版本

问题2:

A -> B -> D(1.0)

A -> E -> D(2.0)

A项目会依赖D的哪一个版本?

配置在上面的优先

问题3:

解决方案1:为新添加的这个依赖于DataBaseService的类新建一个模块,让这个新建的模块依赖于DataBaseService模块

解决方案2:将新添加的这个依赖于DataBaseService的类,移动至DataBaseService模块

分析依赖

依赖列表

mvn dependency:list

依赖树

mvn dependency:tree

依赖分析

mvn dependency:analyze

总结:上面这几条命令基本不会使用,开发过程中都是使用IDE自带的工具或插件

工具1:

工具2:

插件 Maven Helper插件

打开pom.xml后,就会多出Dependency Analyzer选项了

排除依赖

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>4.3.4.RELEASE</version>
  <exclusions>
    <exclusion>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
    </exclusion>
  </exclusions>
</dependency>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值