1、maven坐标元素
maven坐标元素包括:groupId、artifactId、version、packaging、classifier。
classifier:定义输出的附属构件。groupId、artifactId、version是pom.xml中必须定义的,packaging是可选的,classifier是不能直接定义的。
2、dependency中的元素
<dependencies> <dependency> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <type>...</type> <scope>...</scope> <optional>...</optional> <exclusions> <exclusion>...</exclusion> </exclusions> </dependency> </dependencies>
说明:
type:依赖的类型,对应项目坐标定义的packaging。
scope:依赖的范围。
optional:标记依赖是否可选。
exclusions:用来排除传递性依赖。
classpath类型:编译时classpath、测试时classpath、运行时classpath。
3、scope依赖范围:compile、test、provided、runtime、system、import
1》compile:编译依赖范围。默认的依赖范围。对编译、测试、运行的classpath都有效。
2》test:测试依赖范围。只对测试classpath有效,编译主代码、运行项目的使用时无法使用此类依赖。编译测试代码、运行测试的时候可以使用。
3》procided:已提供依赖范围。对于编译和测试classpath有效,但在运行时无效。举例servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要maven重复的引入一遍。
4》runtime:运行时依赖范围。对于测试和运行有效,但在编译主代码时无效。举例jdbc驱动,项目主代码编译只需要jdk提供的jdbc接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体jdbc驱动。
5》system:系统依赖范围。该依赖与3种classpath的关系,和provided依赖范围完全一致。但是,使用system的依赖时必须通过systempath元素显式的指定依赖文件的路径。由于此类依赖不是通过maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植性。systempath元素可以引用环境变量,如:
<dependencies> <dependency> ... <scope>system</scope> <systemPath>{java.home}/lib/rt.jar</systemPath> ... </dependency> </dependencies>
6》import(maven2.0.9及以上):导入依赖范围。该依赖范围不会对3种classpath产生实际的影响。
4、传递性依赖
传递性依赖:A包依赖于B包,B包又依赖于C包,通过手工管理jar包的引入,将会在jar下载的过程当中下了很多冗余的jar包。