定义
构件:在Maven中,任何依赖(jar包,tomcat等),或项目(本身打包的jar,war等)输出均可成为构件。每一个构件都有本身的惟一标识(惟一坐标),由groupId,artifactId,和version等信息构成,由此,Maven就能够对构件进行版本控制,管理。java
- groupId:当前Maven构件隶属的项目名。实际开发中,项目每每会模块化开发,如spring-core,spring-aop等,他们都是Spring项目下不一样的模块。命名方式与Java包名相似,一般是域名的反向书写。如ch.qos.logback,事实上项目管理组织的网址是:http://logback.qos.ch/ 。(必须)
- artifactId:隶属项目中的模块名。(必须)
- version:当前版本。(必须)
- packaging:打包方式,如jar,war... (必须)
- classifier:帮助定义构建输出的一些附属构件。如spring-core.jar,还生成有文档javadoc.jar,源码sources.jar。
特性
- 构件具备依赖传递。例如:项目依赖构件A,而构件A又依赖B,Maven会将A和B都视为项目的依赖。
- 构件之间存在版本冲突时,Maven会依据 “短路优先” 原则加载构件。此外,咱们也能够在POM.XML中,使用<exclusions></exclusions>显式排除某个版本的依赖,以确保项目可以运行。
- 项目依赖构件A和B,构件A → C → D(version:1.0.0),构件B → D(version:1.1.0),此时,Maven会优先解析加载D(version:1.1.0)。
- 项目依赖构件A和B,构件A → D(version:1.0.0), 构件B → D(version:1.1.0),此时,Maven会优先解析加载D(version:1.0.0)。
- 构件的依赖范围。Maven在项目的构建过程当中,会编译三套classpath,分别对应:编译期,运行期,测试期。而依赖范围,就是为构件指定它能够做用于哪套classpath。
|
编译期 |
测试期 |
运行期 |
说明 |
compile |
√ |
√ |
√ |
默认范围 |
provided |
√ |
√ |
|
如servlet-api.jar,运行期由web容器提供 |
runtime |
|
√ |
√ |
编译期无需直接引用。 |
test |
|
√ |
|
如junit.jar |
system |
√ |
√ |
|
必须经过 <systemPath></systemPath> 元素,显示指定依赖文件的路径,与本地系统相关联,可移植性差。web |
import |
|
|
|
表示继承父POM.XML中的依赖范围设置 |