nexus是一个maven私服。
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的用户使用。当Maven需要下载构件的时候,它从私服请求,如果 私服上不存在该构件,则从外部远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。
私服的好处:
a、节省自己的外网带宽
b、加速Maven构建
c、部署自己内部的第三方构件
d、提高稳定性,增强控制
e、降低中央仓库的负荷。
网上很多文档说官网下载慢,但是能下载,但是我一直没下载下来,即使,也没有成功下载,最后从国内csdn网友的分享下载的。这里也分享一下:
链接:https://pan.baidu.com/s/1oN6p-v8r8kfHbaHUbtjEaA
提取码:bn50
nexus为windows、osX、unix三个平台提供支持。我分享的版本是:nexus-3.20.1-01-win64.rar
1、解压压缩包到指定文件夹,比如:D:\06.tools\nexus3,得到nexus-3.20.1-01文件夹和 sonatype-work 文件夹
nexus-3.16.2-01:是nexus服务器相关的文件
sonatype-work:是nexus工作的数据文件,上传下载的jar包就在这个文件夹下面。
在命令提示符中进去D:\06.tools\nexus3\nexus-3.20.1-01\bin文件夹,执行命令:nexus /run,访问http://localhost:8081
nexus3的使用
使用默认用户admin,密码admin123,登录。
Nexus有4个【类型】的数据仓库,分别是hosted,proxy,group、virtual(基本不用)。
Nexus默认的仓库类型有以下四种:(上面的名字可以随便取,关键是它对应的是什么仓库类型) 1)group(仓库组类型):又叫组仓库,用于方便开发人员自己设定的仓库; 2)hosted(宿主类型):内部项目的发布仓库(内部开发人员,发布上去存放的仓库); 3)proxy(代理类型): 从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值即被代理的远程仓库的路径); 4)virtual(虚拟类型): 虚拟仓库(这个基本用不到,重点关注上面三个仓库的使用); Policy(策略):表示该仓库为发布(Release)版本仓库还是快照(Snapshot)版本仓库; |
Nexus预定义了2个本地仓库,分别是maven-releases, maven-snapshots。
默认仓库介绍 1)maven-central(proxy): maven中央库,默认从https://repo1.maven.org/maven2/拉取jar 2)maven-releases(hosted): 私库发行版jar 3)maven-snapshots(hosted):私库快照(调试版本)jar 4)maven-public(group): 仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用。 |
1)Maven可直接从【hosted宿主仓库】下载构件,也可以从【proxy代理仓库】下载构件,而代理仓库间接的从所代理的【远程仓库】下载并缓存构件
2)为了方便,Maven可以从仓库组下载构件,而仓库组并没有实际的内容(下图中用虚线表示,它会转向包含的宿主仓库或者代理仓库获得实际构件的内容).
(~~非必要~~)直接使用Nexus预定义了2个本地仓库maven-releases, maven-snapshots就行,用来存放我们自己工程发布的jar包
根据类型选择其中一个:
如果是创建的proxy仓库或者hosted仓库,需要添加到公共仓库里。
(~~非必要~~):直接通过工程deploy发布我们自己工程项目
1、目的:在本地maven中配置nexus私服,可以:
2、方式:修改setting.xml文件,可以修改maven安装目录下conf中的该文件($MAVEN_HOME/conf/setting.xml),也可以修改用户目录下.m2目录的该文件,我选择修改后者,因为更换maven版本时不需要考虑配置文件的再次修改。
1)设置私服账号密码:servers标签增加如下内容
注意这里配置的server的id必须和pom文件中的distributionManagement对应仓库的id保持一致,maven在处理发布时会根据id查找用户名称和密码进行登录和文件的上传发布。
这里的ID值对应pom.xml的id=releases的仓库,也就是
releases
admin
admin123
snapshots
admin
admin123
nexus-ma
admin
admin123
2)为仓库列表配置的下载镜像列表
nexus-ma
internal nexus repository
http://10.20.30.158:8081/repository/maven-public/
*
3)配置远程发布的私服
nexus-pr
nexus-ma
Nexus Central
http://10.20.30.158:8081/repository/maven-public/
default
true
true
nexus-ma
Nexus Central
http://10.20.30.158:8081/repository/maven-public/
default
true
true
4)激活
nexus-pr
1、目的
项目通过执行maven的deploy任务可以将release或者snapshot版本发布到nexus上
2、方式
pom.xml中添加:
releases
http://10.20.30.158:8081/repository/maven-releases/
snapshots
http://10.20.30.158:8081/repository/maven-snapshots/
其中maven-releases与maven-snapshots区别,是体现在创建仓库时【version pollcy版本策略】属性的设置上:
工程中通过pom.xml中version的内容(版本号中-SNAPSHOT部分)来决定deploy时发布到哪个库中
1、maven中的仓库分为两种
定义一个maven项目(project或者模块)为快照版本,只需要在pom文件中在该模块的version版本号后加上-SNAPSHOT即可(注意这里必须是大写),如下:
1.0-SNAPSHOT
如果带有“-SNAPSHOTS” 打包快照版本,否则即为线上版本,约定俗成的命名,如下:
1.0-RELEASE
maven会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本。
所以,最佳实践:我们在开发阶段,可以将公用库的版本设置为【快照版本】,而被依赖组件则引用快照版本进行开发,在公用库的快照版本更新后,我们也不需要修改pom文件提示版本号来下载新的版本,直接mvn执行相关编译、打包命令即可重新下载最新的快照库了,从而也方便了我们进行开发。
如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。 SNAPSHOT是不稳定版,可能是还在开发中的版本,在开发时用户A可能每天都会更新代码,可能会频繁的发布版本。而另一组用户B需要实时得到A的最新代码版本,以进行同步开发。如果使用RELEASE仓库需要不停的更换坐标,才能升级到最新版本。而SNAPSHOT仓库则不需要这样做,用户A和用户B都不用升级版本。用户A每次发布时会根据当时时间创建一个新的快照版本,之前的快照版本也会保留成为历史版本。用户B每次构建项目时会自动根据版本时间加载最新的JAR包,这种模式更加适合于多模块同步开发测试阶段 如果是正式发布版本,那么在mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。 所以,我们在开发阶段,可以将公用库的版本设置为快照版本,而被依赖组件则引用快照版本进行开发,在公用库的快照版本更新后,我们也不需要修改pom文件提示版本号来下载新的版本,直接mvn执行相关编译、打包命令即可重新下载最新的快照库了,从而也方便了我们进行开发。 用户A将代码打包发布到RELEASE仓库,具体操作参考上篇文章。用户B使用时,需要在pom.xml添加JAR包的依赖坐标。如果用户A将版本从1.0升级为2.0,用户B使用时也需要同时在pom.xml中修改坐标版本。但是RELEASE是稳定版本,是经过测试以后才会发布的,通常不会频繁的升级版本 |
D:\06.tools\maven-repository
releases
admin
admin123
snapshots
admin
admin123
nexus-ma
admin
admin123
nexus-ma
internal nexus repository
http://10.20.30.158:8081/repository/maven-public/
*
nexus-aliyun
central
Nexus aliyun
http://maven.aliyun.com/nexus/content/groups/public
jdk-1.8
true
1.8
1.8
1.8
1.8
nexus-pr
nexus-ma
Nexus Central
http://10.20.30.158:8081/repository/maven-public/
default
true
true
nexus-ma
Nexus Central
http://10.20.30.158:8081/repository/maven-public/
default
true
true
nexus-pr
jdk-1.8
Incorrect username or password, or no permission (Nexus3 登陆密码不为 admin123 、重置登陆密码)
后来注意到在登陆时有提示信息 ,密码保存在 /nexus-data下的 admin.password 中
找到admin.password ,查看并复制密码登录即可,然后登录后会提示修改密码:
注意密码只有这一部分:cb424ffc-fc4b-41c1-9cbf-d7ea26efd978,紧跟后面的 bash-4.2$ 不是密码内容
Nexus默认远程仓库为maven的中央仓库,https://repo1.maven.org/maven2/,国内访问慢导致下载很慢
方式1:直接修改nexus自带的maven-centra代理库url为:http://maven.aliyun.com/nexus/content/groups/public
方式二:添加阿里云代理仓库将其加入maven-public并设置顺序在maven-central代理库前面
1)添加代理仓库,create repository -> maven2 proxy
填写:设置仓库名称,仓库地址,仓库存储的位置(default就行)
name:nexus-aliyun
remote storage:http://maven.aliyun.com/nexus/content/groups/public
把nexus-aliyun添加到仓库组中,记得把nexus-aliyun排在maven-central代理库上边。
这样,就可以优先访问阿里云仓库了。
1)安装配置运行
https://www.cnblogs.com/breeze-zZ/p/11049743.html
2)发布项目到私服
https://www.cnblogs.com/lenovo_tiger_love/p/10309782.html
3)maven的pom.xml配置详解(也有在linux安装nexus过程)
https://blog.csdn.net/luoww1/article/details/87718932?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-7
4)登录时,默认密码提示超时处理方式
https://cloud.tencent.com/developer/article/1478468
5)为Nexus配置阿里云代理仓库
https://www.cnblogs.com/godwithus/p/8955824.html