Maven之构件

定义

  构件:在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。

特性

  1. 构件具备依赖传递。例如:项目依赖构件A,而构件A又依赖B,Maven会将A和B都视为项目的依赖。
  2. 构件之间存在版本冲突时,Maven会依据 “短路优先” 原则加载构件。此外,咱们也能够在POM.XML中,使用<exclusions></exclusions>显式排除某个版本的依赖,以确保项目可以运行。
    1. 项目依赖构件A和B,构件A → C → D(version:1.0.0),构件B → D(version:1.1.0),此时,Maven会优先解析加载D(version:1.1.0)。
    2. 项目依赖构件A和B,构件A → D(version:1.0.0), 构件B → D(version:1.1.0),此时,Maven会优先解析加载D(version:1.0.0)。
  3. 构件的依赖范围。Maven在项目的构建过程当中,会编译三套classpath,分别对应:编译期,运行期,测试期。而依赖范围,就是为构件指定它能够做用于哪套classpath。
  编译期 测试期 运行期 说明
compile 默认范围
provided   如servlet-api.jar,运行期由web容器提供
runtime   编译期无需直接引用。
test     如junit.jar
system  

必须经过 <systemPath></systemPath> 元素,显示指定依赖文件的路径,与本地系统相关联,可移植性差。web

import       表示继承父POM.XML中的依赖范围设置
相关文章
相关标签/搜索