开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 28 天,点击查看活动详情
当第⼀次运⾏Maven命令的时候, 你需要Internet链接, 因为它需要从⽹上下载⼀些⽂件。 那么它从哪⾥下载呢? 它是从Maven默认的远程库下载的。 这个远程仓库有Maven的核⼼插件和可供下载的jar⽂件。
对于Maven来说, 仓库只分为两类: 本地仓库和远程仓库。
当Maven根据坐标寻找构件的时候,它⾸先会查看本地仓库,如果本地仓库存在,则直接使⽤; 如果本地没有,Maven就会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使⽤。 如果本地仓库和远程仓库都没有,Maven就会报错。
远程仓库分为三种: 中央仓库,私服, 其他公共库。
中央仓库是默认配置下,Maven下载jar包的地⽅。
私服是另⼀种特殊的远程仓库,为了节省带宽和时间,应该在局域⽹内架设⼀个私有的仓库服务器,⽤其代理所有外部的远程仓库。 内部的项⽬还能部署到私服上供其他项⽬使⽤。
⼀般来说,在Maven项⽬⽬录下,没有诸如lib/这样⽤来存放依赖⽂件的⽬录。 当Maven在执⾏编译或测试时,如果需要使⽤依赖⽂件,它总是基于坐标使⽤本地仓库的依赖⽂件。
默认情况下, 每个⽤户在⾃⼰的⽤户⽬录下都有⼀个路径名为.m2/repository/的仓库⽬录。 有时候,因为某些原因(⽐如c盘空间不⾜),需要修改本地仓库⽬录地址。
对于仓库路径的修改,可以通过maven 配置⽂件conf ⽬录下settings.xml来指定仓库路径
<!-- 设置到指定⽬录中,路径的斜杆不要写反 -->
<settings>
<localRepository>E:/maven/address</localRepository>
</settings>
7.1. 中央仓库
由于原始的本地仓库是空的,maven必须知道⾄少⼀个可⽤的远程仓库,才能执⾏maven命令的时候下载到需要的构件。中央仓库就是这样⼀个默认的远程仓库。
maven-model-builder-3.3.9.jar maven⾃动的 jar 中包含了⼀个 超级POM。定义了默认中央仓库的 位置。
中央仓库包含了2000多个开源项⽬,接收每天1亿次以上的访问。
7.2. 私服
私服是⼀种特殊的远程仓库,它是架设在局域⽹内的仓库服务, 私服代理⼴域⽹上的远程仓库,供局域⽹内的maven⽤户使⽤。 当maven需要下载构件时, 它去私服当中找,如果私服没有, 则从外部远程仓库下载,并缓存在私服上, 再为maven提供。
此外,⼀些⽆法从外部仓库下载的构件也能从本地上传到私服提供局域⽹中其他⼈使⽤配置⽅式项⽬pom.xml 配置
<repositories>
<repository>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>public</id>
<name>Public Repositories</name>
<url>http://192.168.0.96:8081/content/groups/public/</url>
</repository>
<repository>
<id>getui-nexus</id>
<url>http://mvn.gt.igexin.com/nexus/content/repositories/releases/</url>
</repository>
</repositories>
公司内部应该建⽴私服:
- 节省⾃⼰的外⽹带宽
- 加速maven构建
- 部署第三⽅控件
- 提⾼稳定性
- 降低中央仓库的负荷
7.3. 其他公共库
常⽤的阿⾥云仓库配置
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>