Maven依赖

1、依赖有哪些配置?
  • 示例:
<dependency>
<groupId>com.icegreen</groupId>
<!-- GreenMail是开源的邮件服务测试套件 -->
<artifactId>greenmail</artifactId>
<version>1.3.1b</version>
<type>jar</type>
<scope>test</scope>
<optional> true</optional>
<exclusions>
<exclusion></exclusion>
</exclusions>
</dependency>
  • 配置元素解释
groupId、artifactId、version:依赖的基本坐标,每个都有。
type:依赖的类型,对应于项目坐标定义packaging,大部分情况下该元素不必声明,其默认值jar
scope:依赖的范围
optional:标记依赖是否可选,可选依赖
exclusions:用来排除传递性依赖

2、依赖范围的解释?
不同的运行周期需要不同的jar包,依赖不同的文件,为了更有效的使用构建。
依赖范围用来控制依赖与这三种classpath(编译classpath,测试classpath,运行classpath)的关系。
Maven有以下几种依赖范围:
  • compile:编译依赖范围,默认值。
  • test: 测试依赖范围。
  • provided: 已提供依赖范围。使使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。典型的例子就是servlet-api,编译和测试的时候需要,但在运行项目的时候不需要,由于容器已经提供,就不需要冲入的引入了。
  • runtime:运行时依赖范围。对于测试和运行classpath有效,但在编译主代码时无效。如JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在测试和运行的时候才需要实现JDBC接口的具体实现。
  • system:系统依赖范围。同provided一样,不常用
  • import:导入依赖范围。不会对三种classpath有影响,不常用

3、传递性依赖?什么意思,有哪些特性
A构建(jar)依赖B【第一依赖】,B依赖C【第二依赖】。如果都是默认的compile依赖范围,那么C就是A的一个传递性依赖。
传递性依赖Maven是会自动引入到项目中的。
对比其规律

4、依赖调解,调解肯定是传递性依赖产生冲突了,Maven有哪些原则来解决这些问题。
  • 路径最近者优先(依赖层数最少者优先)
  • 最先声明者优先(传递性依赖中,路径/层数一样,同一个版本最先声明者优先)

5、可选依赖,可选存在于多个特性仅能保存其一的情况,一般情况下不建议这样使用。
项目排除的,例如数据库驱动
<optional> true</optional>

6、Maven依赖技巧:
排除依赖:exclusions
可以包括多个<exclusion></exclusion>
排除的时候,exclusion仅需要groupId和artifactId,不需要version

归类依赖:同一版本,定义一个变量
定义一些全局变量,用<properties></properties>,示例:
< properties>
< project.build.sourceEncoding>UTF-8</ project.build.sourceEncoding>
</ properties>
引入全局变量
<dependency>
<encoding> ${project.build.sourceEncoding}</encoding>
</dependency>

优化依赖:同优化代码一样,去除多余的依赖,显式的声明某些必要的依赖,工具分析的使用命令。
mvn dependency:list --查看当前项目已解析依赖

mvn dependency:tree --查看已解析的依赖树

mvn dependency:analyze --分析依赖前缀的问题,如下指出 了项目未使用,但是显式声明的依赖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值