<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.2.2</version>
<classifier>jdk13</classifier>
</dependency>
其中classifier 可以是jdk13,jdk15,jdk15-javadoc,jdk15-sources,表明你可以依赖不同jdk版本的jar包,甚至可依赖javadoc或sources包。
1 编译主代码,2 编译测试代码和运行测试代码,3 运行程序有三套classpath
scope:
compile(默认),依赖存在于三种classpath内
test,只在2
provided,在1,2, 3由容器提供,如serlvet-api
runtime, 在2,3,如jdbc驱动,编译时不需要
上面行为第二依赖,左边列为第一依赖,先看第二,第二为compile,同第一,第二为test,不传递,第二为provided,第一为provided才provided,第二为runtime,同第一(除了第一为compile,此时为runtime)
路径最短优先,路径长度一样看声明顺序
重要:有传递依赖A版本为v1,自己pom内dependencyManagement(可以parent继承或scope为import的导入)里A版本为v2,最后解析出来A的版本为v2
<dependency>
<optional>true</optional>
</dependency>
可选依赖表明依赖不会被传递,只对自己生效。
<dependency>
<exclusions>
<exclusion>
<groupId>com.cc.maven</groupId>
<artifactId>project-c</artifactId>
</exclusion>
</exclusions>
</dependency>
排除依赖
pom中的repositories:定义下载的各个仓库。
<repositories>
<repository>
<releases>
<enabled>true</enabled>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
<id>public</id>
<name>all repoes</name>
<url>http://maven.release.ctripcorp.com/nexus/content/groups/public</url>
</repository>
上述分析:可下载发布版和快照版构件,checksumPolicy决定(fail,warn,ignore)下载构件后验证校验和失败时的行为
updatePolicy(默认daily,never,always-每次构建都检查,interval : X,隔X分钟检查一次):决定从远程仓库检查更新的频率,某个版本(可能snapshot,也可能非snapshot)都有变动的可能,不能说本地仓库有了,就永远不去看远端这个版本是否变动了。
pom中的distributionManagement:定义上传(deploy)的仓库和快照仓库
<distributionManagement>
<repository>
<id>releases</id>
<url>http://maven.dev.sh.ctripcorp.com:8081/nexus/content/repositories/tourrelease</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://maven.dev.sh.ctripcorp.com:8081/nexus/content/repositories/toursnapshot</url>
</snapshotRepository>
</distributionManagement>
settings中的servers/server:定义访问 各上传或下载仓库的设置(如用户名,密码)
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
settings中的mirrors/mirror:为下载的仓库定义镜像
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>public</name>
<url>http://maven.release.ctripcorp.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
release或普通版本:构建时本地仓库无此jar包才拉取,一般不配置(默认daily),重新deploy就会覆盖原来版本
snapshot:根据timestamp有多个版本,(一般配置always)每次构建都需要拉取远端的metadata文件看是否有更新版本可以拉取