Maven基础POM配置讲解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
To be continued……
Maven依赖配置
一个依赖(<dependency>)的声明可以包含以下元素: <project> <dependencies> <dependency> <groupId> </groupId> <artifactId> </artifactId> 依赖的基本坐标,Maven根据坐标 <version> </version> 才能找到依赖。 <type></type> 依赖的类型,对应packaging,默认 .jar <scope></scope> 依赖的范围。 <optional></ optional> 是否为可选依赖。 <exclusions> 用来排除传递性依赖。 <exclusion> </exclusion> </ exclusions> </dependency> </dependencies> </project>
模块中有一个compile依赖范围的spring-core依赖,spring-core有一个 compile依赖范围的commons-loggings依赖。则commons-loggings是本 模块的传递性依赖。 依赖范围影响传递性依赖
第二依赖 第一依赖
compile compile
test ―
provided ―
Maven依赖范围 <scope></scope>
三套classpath:编译classpath、测试classpath、运行classpath。 依赖范围就是用来控制,依赖(dependency)与这三种classpath的关系。 Maven提供的依赖范围: compile:编译依赖范围(默认依赖范围)。全有效(spring-core) test:测试依赖范围。测试classpath有效(junit) provided:已提供依赖范围。编译和测试classpath有效(servlet-api) runtime:运行时依赖范围。测试和运行classpath有效(JDBC驱动) system:系统依赖范围。与provided一样(需要指定路径,非Maven仓库) import:导入依赖范围。不会对三种classpath产生实际的影响。 依赖范围 compile test provided runtime system 编译有效 √ ― √ ― √ 测试有效 √ √ √ √ √ 运行有效 √ ― ― √ ― 例子 Spring-core Junit Servlet-api JDBC驱动
第一原则: 路径最近者优先 第二原则: 第一声明者优先
可选依赖(true) 现有如下依赖:模块A依赖于模块B,模块B依赖于模块X和Y。
X(可选依赖) A B Y(可选依赖)
三个依赖的范围都是compile,但是X和Y都是可选依赖,所以依赖将不 会得以传递。也就是说,X和Y不会对A有任何影响。 说明:X和Y都支持数据库,在使用的时候需要两种驱动,但是使用的 时候,只会依赖一种驱动,需要在A中显示的配置出来。
Maven学习-- 3.0
@author
Maven坐标详解
<groupId>org.sonatype.nexus</groupId> 定义当前Maven项目隶属的实际项目。 <artifactId>nexus-indexer</artifactId> 该元素定义实际项目中的一个Maven项目,推荐使用实际项目名称 作为前缀。 <version>2.0.0</version> 该元素定义Maven项目当前所处的版本。 <packaging> jar</packaging> 该元素定义Maven项目的打包方式:.jar .war <classifier></classifier> 该元素用来帮助定义构建输出的一些附属构件 说明:上述5个元素, groupId、 artifactId、 version是必须定义的, packaging是 可选的(默认为 .jar), classifier是不能直接定义的。
Maven排除依赖 <exclusions> </exclusions>
Maven的传递性依赖会隐式地传入很多依赖,但是会有一些问题。 例如:A依赖于B,B依赖于很多(C、D、E、F),但是我们不想引入C的依赖。 这个时候,就需要使用排除依赖。 如下: <exclusions> <exclusion> <groupId> </groupId> <artifactId> </artifactId> </exclusion> </ exclusions> 我们排除了C的依赖的同时,也可以显式的引入C的依赖,两者不影响。
Maven模块概念
1、在Maven中,一个项目会被划分成很多模块。比 如:org.SpringFramework项目,对应的Maven模块 会有很多,如:spring-core、spring-context。
2、 groupId不应该只对应到公司(组织)的名称。 因为一个公司(组织)会有很多的项目, 当 artifactId 定义Maven模块,而groupId只定义到公 司(组织)名称时,项目名称将难以定义。
Maven依赖解析
在开发时,Maven会自动的帮我们解析直接依赖和传递性依,并 确保不会产生依赖冲突。在完成这些工作以后,得到的最后的依 赖称为已解析依赖。 命令: mvn dependency:list mvn dependency:tree mvn dependency:analyze(工具)
runtime runtime
Fra Baidu bibliotek
compile
test
provided runtime
test
provided runtime
―
― ―
―
provided ―
test
provided runtime
依赖调节(两大原则) ABCX(1.0) ABX(2.0) ABX(1.0) ACX(2.0)
本地的 Maven仓库之外
Maven可选依赖 <optional></ optional>
传递性依赖(机制): 例如:项目需要spring-core.jar,spring-core.jar还需要别的.jar,那么两 者都需要手动导入,这是很麻烦的。而Maven可以很好的解决这个问 题。
本模块 Spring-core Commons-loggings