Maven之依赖详解
文章目录
依赖的坐标
通过经纬度可以找到地图上任意一个位置,那么如何才能找到一个Maven世界中的一个构件呢?对于项目依赖管理作为主要功能之一的Maven使用groupId, artifactId, version, packaging, classifier这5个维度对构件进行定位。下面分别对各个维度的定义和作用进行解释:
- groupId: 定义当前Maven项目隶属的实际项目。需要注意的两点是:
- Maven构件和实际项目不一定是一对一的关系,因为Maven中有模块的概念,所以通常一个实际项目会被划分为多个模块,一个实际项目也就有多个构件。最典型的如SpringFramework,其包含了spring-beans, spring-core等众多模块。
- groupId不应与公司或组织对应,应划分到公司下的实际项目中,如果与公司或组织对应,则Maven构件的划分将很难进行(无法根据坐标判断是哪个实际项目下的模块)。
- artifactId: 定义实际项目中的一个Maven项目(模块)。推荐做法是使用带有实际项目含义的名称作为前缀。比如SpringFramework中的,spring-beans就是以实际项目名spring作为前缀。这样做的好处是方便寻找实际的构件,默认情况下Maven生成的构件的文件名会以artifactId作为开头,如:spring-beans-5.1.6.REALEASE.jar,所以使用实际项目名作为前缀可以方便的在目录中寻找某项目的一组构件;否则,A项目的beans模块与B项目的beans模块将混杂在一起,很难按照实际项目对其进行区分。
- version: 定义Maven项目(构件)当前所处的版本。Maven将项目版本分为了发布版和快照版。
- packaging: 定义Maven项目(构件)的打包方式。通常打包方式是与生成构件的文件扩展名一致的;如packaging为jar,则最终生成的文件名为xxx.jar;不对packaging进行定义时默认值为jar
- classifier:该元素用来帮助定义构建输出的一些附属构件。不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成的。(不是很明白)
上述5个维度中,groupId, artifactId和version是必须要在构件中定义的,packaging是可选的,classifier则是不能直接定义的。
依赖的引入
当得知依赖的坐标之后,我们该如何引入依赖呢?依赖引入的结构和描述依赖的基本组成元素如下:
<project>
...
<dependencies>
<dependency>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>