关闭

Maven依赖

180人阅读 评论(0) 收藏 举报
分类:
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 --分析依赖前缀的问题,如下指出 了项目未使用,但是显式声明的依赖

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:29846次
    • 积分:887
    • 等级:
    • 排名:千里之外
    • 原创:63篇
    • 转载:1篇
    • 译文:0篇
    • 评论:6条
    文章分类
    最新评论