参考: https://www.cnblogs.com/bingyeh/p/5913486.html
- 代理仓库的地址一定要准确
- 代理仓库与宿主仓库在仓库组中的顺序,有可能导致加载错误的构件
Nexus 基本概念
Nexus 是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了 Nexus 之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。
Nexus 的仓库分为这么几类:
- hosted 宿主仓库:主要用于部署无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)以及自己或第三方的项目构件;
- proxy 代理仓库:代理公共的远程仓库;
- virtual 虚拟仓库:用于适配 Maven 1;
- group 仓库组:Nexus 通过仓库组的概念统一管理多个仓库,这样我们在项目中直接请求仓库组即可请求到仓库组管理的多个仓库。
Maven 代理仓库
点击菜单 Add - Proxy Repository ,添加代理仓库:
Remote Storage Location 填写为 http://repo1.maven.org/maven2
这里的仓库地址一定要写准确,可以通过 Browse Remote
功能来验证是否仓库是否可用。
仓库组
将添加的所有的代理仓库,宿主仓库加入到 Public Repositories 仓库组。
选中 Public Repositories,在 Configuration 选项卡中,将 Sonatype Repository 从右侧 Available Repositories 移到左侧 Ordered Group Repositories。
特别需要注意的是,仓库组中的仓库是有序的,当需要加载构件时,会按顺序查询。这时,如果第一个仓库中有一个错误的构件,就会导致项目构建失败,需要把有正确构件的仓库调整到前面,才可以正确加载。
特别注意
如果使用 mvn 命令手动添加 jar 包到 nexus 的仓库中,必需提供相应的 pom.xml 文件,才能正确的解决依赖,否则它就是一个 jar,当其被加载的时候,是不会对它的依赖包进行自动加载的,因为相应的信息存储在 pom.xml 文件中。
这样的话这个 jar 就是变成一个僵尸 jar。
这是非常危险的,有可能导致后续的很多问题。