Maven 私服
# 仓库概念
中央仓库
目前来说: https://repo1.maven.org/maven2/是真正的Maven中央仓库的地址,该地址内置在Maven的源码中其他的都是镜像。
仓库镜像
如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像,使用镜像可以提高项目构建效率。
仓库的索引
中央仓库带有索引文件以方便用户对其进行搜索,索引每周更新一次,中央仓库的索引有几十M。
黑名单
如果某个IP地址恶意的下载中央仓库内容,例如全公司100台机器使用同一个IP反复下载,这个IP(甚至是IP段)会进入黑名单,因此稍有规模的使用Maven时,应该用Nexus架设私服。
私服
有些公司不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库。
# 私服安装
Nexus的官网 https://www.sonatype.com/ (opens new window)
# 启动
- 进入Nexus的bin目录下运行cmd进入命令行
- 可以输入nexus /?查看所有的参数,输入 /run在窗口下运行服务器

启动成功,默认是8081,不要关闭这个窗口,不然服务器就退出了
# 访问
- 当Nexus启动后,可以在浏览器中输入:http://localhost:8081/ (opens new window)可以看到以下页面
、
- 点击右上角登录

- 弹出以下对话框

- 输入默认的帐号:admin,密码:在admin.password文件中找
- 登录成功以后出现配置向导,直接点next
- 修改密码,输入两次,建议都使用admin,不要忘记了

- 允许匿名的账户登录

- 配置完成

# 仓库类别和配置

proxy:是远程仓库的代理。比如说在nexus中配置了一个central仓库的proxy,当用户向这个proxy请求一个组件,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用。
Hosted:是宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。比如说oracle的驱动程序,在central repository是获取不到的,就需要手动上传到hosted里。
Group:是仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了。
注:公司内部通常只需关注hosted宿主仓库就可以了
# 修改配置
Nexus的中央仓库,默认配置的是maven的中央仓库:https://repo1.maven.org/maven2/ (opens new window),为了提高速度可以配置成阿里云的中央仓库https://maven.aliyun.com/repository/central (opens new window)
- 选择中央仓库

- 修改地址:Remote storage的位置

- 记得点最下面的保存按钮

# 修改RELEASES为可以重复部署
- 因为jar包要上传到这个仓库RELEASES下
- 仓库选择Releases

- 在Access Settings中选择Allow Redeploy,设置为可以重复部署

- 点保存按钮
# 上传项目到私服
- 配置本地仓库访问私服的权限,修改maven的conf/settings.xml配置文件,用户名和密码,复制如下片段到相应的位置,大约在111行。注意:密码要与你设置的密码相同
<server>
<id>releases</id>
<username>admin</username>
<password>admin</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin</password>
</server>
2
3
4
5
6
7
8
9
10
- 新建一个待发布的项目模块

- 在pom.xml文件中添加以下代码段
<distributionManagement>
<repository>
<id>releases</id>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://localhost:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
2
3
4
5
6
7
8
9
10
上面的url即仓库地址
- 执行deploy命令,上传项目到私服。

- 上传日志结果

- 去私服查看snapshots上传的结果

- 修改当前模块的坐标为RELEASE

- 再次上传到私服

- 查看上传的日志

- 查看RELEASE仓库上传的结果

# 从私服下载项目
# 私服下载的配置
注:项目A必须是RELEASE版本才可以使用
- 假设上面的模块是A,创建另一个模块B
<groupId>com.itheima</groupId>
<artifactId>heima-deploy-b</artifactId>
<version>1.0-RELEASE</version>
2
3
- 依赖于上面的模块A
<dependencies>
<dependency>
<groupId>com.itheima</groupId>
<artifactId>heima-deploy</artifactId>
<version>1.0-RELEASE</version>
</dependency>
</dependencies>
2
3
4
5
6
7
- 删除本地仓库中A模块的jar包
- 修改%MAVEN_HOME%\conf\setttings.xml文件,项目B是依赖于私服仓库中模块A
注:后面还要再改回来,以后还是使用阿里云的镜像
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
2
3
4
5
- clean清除项目B,再complie编译一次

- 可以看到日志信息是从本地仓库中下载
