1、maven坐标的元素包括groupId、artifactId、version、packaging、classifer。只要我们提供正确的坐标元素,maven就能找到对应的构件。
groupId:定义当前maven项目隶属的实际项目。(必须的)
artifactId:该元素定义实际项目中的一个maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀,比如上例中的artifactId是nexus-indexer,使用了实际项目名nexus作为前缀,这样做的好处是方便寻找实际构件。在默认情况下,maven生成的构件,其文件名会以artifactId作为开头,如nexus-indexer-2.0.0.jar,使用实际项目名称作为前缀之后,就能方便从一个lib文件夹中找到某个项目的一组构件。(必须的)
version: 该元素定义maven项目当前所处的版本。(必须的)
packaging:该元素定义maven项目打包方式。默认值是jar。
classifier:该元素用来帮助定义构建输出的一些附属构件。
2、maven的依赖管理
资源文件位于src/main/resources/下
依赖的配置:
<project>
...
<dependencies>
<dependency>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<type>...</type>
<scope>...</scope>
<optional></optional>
<exclusions>
<exclusion>
...
</exclusion>
</exclusions>
</dependency>
...
</dependencies>
...
</project>
groupId、artifactId、version:依赖的基本坐标,对于任何一个依赖来说,基本坐标是最重要的,maven根据坐标才能找到需要的依赖。
type:依赖的类型,对应于项目坐标定义的packaging。大部分情况下,该元素不必声明,其默认值为jar。
scope:依赖的范围。
optional:标记依赖是否可选。
exclusions:用来排除传递性依赖。
3、依赖范围
maven在编译项目主代码的时候需要使用一套classpath。
对与元素scope来说,
compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的maven依赖,对于编译、测试、运行三种classpath都有效。
test:测试依赖范围。使用此依赖范围的maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用此依赖。
provided:已提供依赖范围。使用此依赖范围的maven依赖,对于编译和测试classpath有效,但在运行时无效。
runtime:运行时依赖范围。使用此依赖范围的maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。
system:系统依赖范围。该依赖与3中classpath的关系,和provided依赖范围完全一致。但使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件的路径。
import:导入依赖范围。该依赖范围不会对3种classpath产生实际的影响。
4、传递性依赖
maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中。