全局配置文件settings.xml
该配置文件中比较难以理解的是server,mirror, repository,pluginRepository四个概念的关系。
mirror
mirror用于定义远程repository (例如 (Maven central repository http://repo.maven.apache.org/maven2/ ) 的镜像服务器。使用mirror有以下原因:
1、某些公司内部网络不能访问到外网,这样可以通过在内网创建一个mirror server作为外部repository的代理服务器,该mirror 可以连接到外网并从外网的repository下载依赖包。
2、节约网络带宽,如果每个开发人员都直接连接到Maven central repository去下载依赖的文件,所需带宽是非常可观的。而mirror在第一次下载后就可以缓存到本地,不用每一次都从外网去下载。
3、提高下载速度,从内网建立的mirror上下载依赖文件,速度要远远快于从外网的Maven central repository 直接下载。
repository和pluginRepository
如果在中央仓库找不到,它将尝试从setting.xml和pom.xml中定义的远程仓库中下载。
repository和pluginRepository的区别是:repository保存的是编译依赖的jar包,如log4j;而pluginRepository保存的是maven依赖的插件,如用于单元测试的插件。
repository和pluginRepository这两个角色可以由同一台服务器担任。
server
用于设置repository的认证方式,支持用户名/密码和密钥两种方式
项目配置文件pom.xml
该配置文件中重点是理解build life cycle和plugin的关系。
build life cycle由多个phase组成,每个phase由plugin的多个goal组成。phase有一些缺省的goal,例如 compile这个phase缺省包含了compiler:compile这个goal
备注:
一、packaging为pom类型:表示该pom的输出即该pom文件本身,无其他制品输出,在以下几种情况下会遇到:
1、该pom是一个父pom文件,用于定义子pom都会用到的一些设置。
2、该pom是一个聚合文件,其输出物在被聚合的pom中定义。
3、该pom未使用packaging参数定义标准输出物,而是使用assembly插件自定义输出物。
二、顶层 pom 中的 dependencies 与 dependencyManagement 中的 dependencies 元素有一个重要的区别:
顶层pom中的dependencies 元素定义了项目的依赖项。
dependencyManagement 中的 dependencies 元素标明依赖项的版本选择。
三、内部(Internal) Repository
在pom文件的repositories中设置的Repository是内部(Internal) repositories. Internal Repository是在局域网中搭建的Repository,使用internal Repository的一个重要原因是要在项目内部发布并共享项目制品。
maven寻找第三方包的顺序为 local Repository , Internal Repository, Central Repository(或 Mirror Repository)。如果配置有多个Internal Repository,则按顺序依次查找?