Maven学习笔记四(坐标和依赖)

坐标

什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点

Maven 坐标主要组成

groupId:定义当前 Maven 项目隶属项目、组织

artifactId:定义实际项目中的一个模块

version:定义当前项目的当前版本

packaging:定义该项目的打包方式(pom/jar/war,默认为 jar)

groupId、artifactId、version 简称为 GAV。

Maven 为什么使用坐标?

Maven 世界拥有大量构件,需要找一个用来唯一标识一个构建的统一规范 拥有了统一规范,就可以把查找工作交给机器

如何获取坐标 http://mvnrepository.com/ 网站上可以搜索具体的组织或项目关键字,之后复制 对应的坐标到 pom.xml 中。如:

依赖

依赖范围 scope 用来控制依赖和编译,测试,运行的 classpath 的关系。具 体的依赖范围有如下 6 种:

1) compile: 编译域,这个是 Maven 中 scope 的默认值,我们平时不写 scpoe 配置时默认就是使用这个值。compile 表示被依赖项目需要同当前项目编译 时一起进行编译,项目测试期以及本项目运行时期同样生效,打包的时候需 要包含进去。

2) test:测试域,表示被依赖的项目仅在项目进行测试的时候生效,一般将日 志等依赖包(如:Junit)配置为 test,项目运行时不会生效。

3) provided:provided 意味着打包的时候可以不用打包进去,别的容器会提供, 如 Servlet-API,Tomcat 这些容器会提供,所以打包,运行时无需提供。

4) runtime:运行域,表示被依赖项目不会参与项目的编译,但项目的测试期和 运行时期会参与。与 compile 相比,跳过了编译这个环节。(如:JDBC 驱动)

5) system:系统范围,自定义构件,指定 systemPath;跟 provided 相似,但是 在系统中要以外部 JAR 包的形式提供,maven 不会在 repository 查找它。

6) import:只使用在中,表示从其它的 pom 中导入 dependency 的配置。

添加依赖

依赖的传递

A(maven_web1)项目,B(maven_web2)项目 ,C(maven_test2)项目

首先A项目中添加依赖包,保存后项目中会自动导入包

然后A项目的包传递到B项目中,在B项目中依赖:

c项目中依赖B项目的包(因为B也依赖了A项目的包,因此C会依赖A,B项目的包):

说明:

可选依赖

在依赖节点 dependency 中的可以控制当前的依赖是否向下传递; 默认值为 false,表示向下传递。

设置log4j<optional>true</optional>

B项目中log4j包已经没有中A中传递过来

排除依赖

在 pom 中的依赖节点中,如果引入的依赖包含了很多其它的传递依赖,而且 项目需要的这些依赖的版本和传递依赖的不相符;那么可以在依赖节点中设置排 除依赖节点

B项目进行排除依赖,C项目也不接收A中传递给B的依赖

依赖冲突

1.不同依赖路径的情况

如果依赖的路径不相同的时候,以最短的路径为准

比如项目A中咯log4j版本为1.2.14,我们在B中引入1.2.16,那么项目C就会变成1.2.16,就近原则。

2.相同依赖路径的情况

1)如果直接依赖中包含有同一个坐标不同版本的资源依赖,以配置顺序下方的 版本为准

2)如果间接依赖中包含有同一个坐标不同版本的资源依赖,以配置顺序上方的 版本为准

首先我们就导入spring-beans这个资源

然后2个资源依赖一起引用,spring-core版本变成了4.1.6

原文发布于微信公众号 - 编程坑太多(idig88)

原文发表时间:2018-03-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏LeoXu的博客

[转]RPM使用详解 来源:互联网 作者:佚名

在Linux 操作系统中,有一个系统软件包,它的功能类似于Windows里面的“添加/删除程序”,但是功能又比“添加/删除程序”强很多,它就是 Red Hat ...

792
来自专栏龙首琴剑庐

原 微服务Spring Cloud Eur

2365
来自专栏小狼的世界

利用Apache ab以及GNUPlot来进行Web测试

最近写了几个测试脚本,希望要观察使用PUT方式上传文件和使用POST方式上传文件,两者效率的差别。

1032
来自专栏高性能服务器开发

(一)主线程与工作线程的分工

服务器端为了能流畅处理多个客户端链接,一般在某个线程A里面accept新的客户端连接并生成新连接的socket fd,然后将这些新连接的socketfd给另外开...

3669
来自专栏韩伟的专栏

集群开源软件赏:ZooKeeper

本篇是开源软件最后一篇,接下来的一周将推送语言相关或项目管理相关内容。敬请期待。以下正文: 所谓集群系统,是指由多个进程和服务器合作组成完成一定功能的系统。之所...

4257
来自专栏ios 技术积累

Maven 初识

才接触Maven的时候也是一头雾水,网上搜索了一些资料后感觉Maven和iOS开发中的cocoapods很像,cocoapods自动下载我们需要的开源类不需要手...

1703
来自专栏JAVA高级架构开发

浅谈Nginx服务器的内部核心架构设计!

Nginx---Ngine X,是一款免费的、自由的、开源的、高性能HTTP服务器和反向代理服务器;也是一个IMAP、POP3、SMTP代理服务器;Nginx以...

3390
来自专栏数据和云

浅谈TimesTen内存数据库的结构

作者介绍 ? 朱亮 云和恩墨技术专家,6年专职oracle dba生涯先后服务于保险、金融、电信、百货等客户 Oracle TimesTen In-Memor...

3998
来自专栏Sorrower的专栏

详尽! Win10安装Java8+Tomcat9!

Java也好, Tomcat也好, 都是很实用的啦, 早点掌握还是有必要的. 喜欢记得点赞哦, 有意见或者建议评论区哦, 当然暗中关注我也是可以的.

3383
来自专栏晨星先生的自留地

linux软件包管理工具

2813

扫码关注云+社区

领取腾讯云代金券