1. 坐标:
groupId : 当前maven项目隶属的实际项目, 与java包名的方法类似,与域名反向对应。
artifactId: 定义实际项目中的一个Maven项目,推荐的做法是使用实际项目名称作为artifactId的前缀。
version: 定义Maven项目当前所处的版本
packaging: 定义Maven的打包方式
classifier: 帮助定义构建输出的一些附属构建
groupId、artifactId、version是必须定义的,packaging是可选的(默认为jar)、而classifier是不能直接定义的。
2. 依赖的配置:
dependency元素下面包含的元素有:
groupId、artifactId、version : 依赖的基本坐标,
type: 依赖类型,默认值为jar
scope: 依赖的范围
optional: 标记依赖是否可选
exclusions: 排除传递性依赖
3. 依赖范围:
compile: 编译依赖范围
test:测试依赖范围
provided:以提供依赖范围, 对于编译和测试classpath有效,但运行时无效
runtime:运行时依赖范围, 对于测试和运行classpath有效,但在编译主代码时无效
system:系统依赖范围, 和provided一致,但必须通过systemPath元素显示指定依赖文件的路径
import: 导入依赖范围,
4. 依赖传递性
依赖可以传递
在中央仓库中可以查看具体包的依赖。
http://search.maven.org/remotecontent?filepath=org/springframework/spring-core/2.5.6/spring-core-2.5.6.pom
5. 依赖调解
Maven依赖调节第一原则:路径最近者优先
第二原则: 第一声明优先。
6. 最佳实践
(1) 排除依赖: exclusion
排除不稳定版本
排除无版权版本
声明exclusion的时候只需要groupId和artifactId,而不需要version元素。
(2) 归类依赖:
使用properties元素定义Maven属性。
可以使用美元符号和大括号环绕的方式引用Maven属性。
(3) 优化依赖
依赖列表: mvn dependency:list 查看当前项目的已解析依赖
依赖树: mvn dependency:tree
分析依赖: mvn dependency:analyze
Used undeclared dependencies 项目中使用到的,但是没有显示声明的依赖
Unused declared dependencies 项目中未使用的,但显示声明的依赖