008 优势 安装 操作命令 访问 Nexus仓库 调用私服

私服是指私有服务器,是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构建。有了私服之后,当maven需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,在提供给本地仓库下载。

5f97c5e8a6fdf4ad0fe412a73e6b21dc

Nexus是一个强大的maven仓库管理器,它极大的简化了私服仓库的维护和外部仓库的访问。它不需要数据库而是使用文件系统加Lucene来组织数据,使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过IDEA和Eclipse集成使用,支持webDAV与LDAP安全身份认证。

优势

  1. 加速构建
  2. 稳定(应付一旦中央服务器出问题的情况)
  3. 控制和审计
  4. 能够建立内部公用仓库,统一开发规范
  5. 方便开发迭代和技术共享

安装

Nexus 专业版是需要付费的,这里我们下载开源版Nexus OSS
解压即可使用,安装包下有两个子目录:

  1. nexus-3.16.1-02:此目录是安装目录,该目录包含了Nexus 运行所需要的文件,如启动脚本、依赖jar包等
  2. sonatype-work:此目录是工作目录,包含Nexus生成的配置、日志文件、仓库文件等。

65029f7e7c77f0abc0f1e70db3767052

操作命令

执行命令前,需要先打开CMD进入nexus主目录下的bin目录,如:E:nexus-3.16.1-02-win64nexus-3.16.1-02bin

1
2
3
4
5
6
7
8
9
10
注册服务
nexus.exe /install nexus
启动服务
nexus.exe /start nexus
停止服务
nexus.exe /stop nexus
重启服务
nexus.exe /restart nexus
卸载服务
nexus.exe /uninstall nexus

Tips:执行命令如果出现错误:java.lang.NumberFormatException: null,则可能是jdk版本不对,或路径中带中文
在执行注册和启动命令后,可以打开任务管理器查看启动的服务:
60f4c70e926321221c77d9b340e5c095
072874c2b8e19c186311049eabdf8792
158ae036619156626b341c029e3e418a

访问

启动服务后,大致等待几十秒服务完全启动就可以通过这个网址访问主页:http://localhost:8081/
使用默认的用户名和密码登陆(admin/admin123)
723ef6fa413a1b86ba48dd996d2c1f96
注:如果需要修改登录网址的端口号,可以到安装目录下E:nexus-3.16.1-02-win64sonatype-worknexus3etc打开nexus.properties文件,将application-port改成自己的端口,初始文件中代码都被#号注释了,只需将所有#删掉即可

Nexus仓库

仓库类型:

  • hosted:宿主仓库,主要用于部署无法从公共仓库获取的构件以及自己或第三方的项目构件
  • proxy:代理仓库,代理公共的远程仓库;
  • group:仓库组,Nexus 通过仓库组统一管理多个仓库,这样我们在项目中直接请求仓库组即可请求到仓库组管理的多个仓库

77b83519bdf0d7d72603d9b222b68a62
总结:我们可以上传私有的项目到hosted,并配置proxy以获取第三方的依赖(比如可以配置中央仓库的地址)。前面两个都弄好了之后,在通过group聚合给客户提供统一的访问地址。
d265f8ed7f5a988f8afdbce02b9558cb

创建宿主仓库

239e3200b42075cdfa44a0c3da28af44
a70f7defe017f0b1bd61d7d391cc5779
543413b36276f0af1c6c6b36168f45bf
89c9cbbc899175d88cf1e1a9380b53c7

创建代理仓库

67b6c841db3e9dbaa1786a1ccab0715b
常用的远程仓库地址

1
2
3
4
http://repo1.maven.org/maven2/
http://central.maven.org/maven2/
http://repository.jboss.org/nexus/content/groups/public/
http://maven.aliyun.com/nexus/content/groups/public/

创建完需要检查状态是否有成功
b3192ced9432552a3805bc3b40aba14e
可以点进去重建下索引和清除缓存,本地maven项目在同步时,需要从索引检查jar包
4b64b25be39e4aa5aa7b29a365905e02

创建仓库组

39182ae623b6ba4df598a4a468937144

调用私服

下载jar包

将私服仓库组配置到settings.xml文件(配置在POM文件也可以)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

<profiles>
<profile>

<id>Zts_nexus</id>
<repositories>
<repository>
<id>Zts_group</id>
<url>http://localhost:8081/repository/Zts_group/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<!-- 指定激活的配置块名称,必须激活才能生效配置 -->
<activeProfiles>
<activeProfile>Zts_nexus</activeProfile>
</activeProfiles>

<!-- 如果要强制只在指定仓库下载jar包可以用mirrors标签,优先级大于上面的profiles -->
<mirrors>
<mirror>
<!--该镜像的唯一标识符,私服仓库名称 -->
<id>Zts_group</id>
<!--此处配置所有的构建均从私有仓库中下载 *代表所有,也可以写central -->
<mirrorOf>*</mirrorOf>
<name>test repository</name>
<!--该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL -->
<url>http://localhost:8081/repository/Zts_group/</url>
</mirror>
</mirrors>
</settings>

标签的id和url分别可以在Nexus界面查看到
39b9df37171b4ab400929678b885701e
设置完setting文件后,假如我们在POM文件增加一个JUNIT依赖,点击同步后,Maven就从本地仓库查找JUNIT的jar包,找不到就查找私服,私服在宿主仓库(Zts_repository)找不到,继续往代理仓库(Zts_proxy)查找,代理仓库直接从远程仓库下载到代理仓库,再放到到本地。如图,我们可以看到jar被下载到代理仓库
d251b9998218fcac46604422cc166e72

上传jar包

方式一:
POM文件:指定项目部署路径

1
2
3
4
5
6
7
<distributionManagement>
<repository>
<id>Zts_repository</id>
<name>test repository</name>
<url>http://localhost:8081/repository/Zts_repository/</url>
</repository>
</distributionManagement>

setting文件:增加上传需要通过Nexus用户验证

1
2
3
4
5
6
<server>
<!-- id为私服宿主仓库名称,与POM文件中对应 -->
<id>Zts_repository</id>
<username>admin</username>
<password>admin123</password>
</server>

打开CMD命令行进入到项目根文件目录中,执行命令

1
mvn deploy

d8a2e19dfa0be4c3088ea6b2802f0460
成功后可以在私服中可以看到部署的jar包
f7b143f836b0a2544da8cad47c0a6c30
方式二:
手动指定部署的配置

1
mvn deploy:deploy-file -DgroupId=com.co.webapp -DartifactId=webapp -Dversion=1.0 -Dpackaging=jar -Dfile=D:GITwebapptargetwebapp-1.0.jar -Durl=http://localhost:8081/repository/Zts_repository/ -DrepositoryId=Zts_repository

参数说明:

  • -DgroupId:为上传的jar的groupId
  • -DartifactId:为上传的jar的artifactId
  • -Dversion:为上传的jar的version
  • -Dpackaging:为文件类型,这里为jar
  • -Dfile:为jar包路径,注:jar包推荐放在根目录,多层目录可能会报错
  • -Durl:为要上传的路径
  • -DrepositoryId 为repository的唯一标示