原文地址:Nexus私有maven库部署和使用 - Stars-One的杂货小窝
前段圣诞节前后,Jitpack网站突然崩溃了,无法下载依赖,然后过了一个星期才解决了,好在没啥紧急的Android开发任务,没啥影响,但是也给我了一些提醒,可能搭建个私有库会比较保险,于是就是研究了私有库nexus的部署和使用
介绍
nexus私有库,支持npm,java,pythod等库的存放,支持的也比较全面,搭建起来也十分简单。
除此之外,还可以拿私有库当一个镜像中转站,比如说阿里云镜像,实际上它也是将一些中央仓库的库都下载保存下来了,以防中央仓库无法访问导致依赖无法下载的问题,有个缺点就是阿里云没有支持Jitpack这种小众网站
我们可以利用私有库,把Jitpack这种网站也加入进来,也提高了下载依赖的速度和环境的配置
部署
1.下载运行
前往官方下载页下载安装文件,这里以window为例,下载了window的压缩包文件
之后解压,得到两个文件夹目录
打开sonatype-work\nexus3\etc\nexus.properties
文件,修改端口号,如下图所示,我是修改为了9888端口(这里需要运行nexus之后,待其安装好相关环境之后才会有这个nexus.properties的文件)
之后进入到nexus-3.45.0-01\bin
命令下,打开cmd窗口,运行命令nexus.exe /run
,即可将nexus运行起来了
2.登录
运行起来后,我们访问localhost:9888
即可进入到web页面
点击右上角的账号登录,提示我们可以在该路径找到用户名和密码
账号名为admin
,密码则是你用记事本打开那个admin.password
文件里的内容
登录成功后会提示我们输入新密码来修改密码,照着走即可
下一步需要设置是否公开库的选项,不公开的话,下载则需要设置账号和密码才能下载库,我这里就选择了不公开(第二个选项)
之后完成就可以使用了
介绍
首先,先介绍说明的对应的仓库信息
maven-releases
发行版组件, hosted 类型maven-snapshots
:快照(调试版本)组件, hosted 类型maven-central
:maven 中央库,就是代理 https://repo1.maven.org/maven2/,proxy 类型maven-public
:仓库分组概念,虚拟的 把上面三个仓库合并形成一个组,方便引用, group 类型
配置maven依赖的时候,我们只需要引用maven-public的地址即可
而我们需要上传组件,可以上传到maven-releases
和maven-snapshots
这两个仓库中即可
原理如下:
Maven中使用
1.手动上传jar包
进入到上传jar包的页面
选择一个jar文件进行上传
然后上传成功,就可以查看到我们的jar包了
2.自动上传jar包
首先,需要maven的setting.xml
文件中配置私服的账号和密码
<server>
<id>myLocalRepo</id>
<username>admin</username>
<password>admin</password>
</server>
PS:注意外层还有个servers标签
之后根据你的需要,在项目里的pom.xml
或setting.xml
中添加配置distributionManagement
标签信息
项目里,则是单独配置;而setting.xml
,则是全局配置的
这里我以项目里为例,在pom.xml中加上配置
<distributionManagement>
<repository>
<id>myLocalRepo</id>
<name>本地私有库</name>
<url>http://localhost:9888/repository/maven-releases/</url>
</repository>
<!-- 配置快照版本的仓库上传地址,这里不演示了,自行修改 -->
<!-- <snapshotRepository>-->
<!-- <id>myLocalRepo</id>-->
<!-- <name>本地私有库</name>-->
<!-- <url>http://localhost:9888/repository/maven-snapshots/</url>-->
<!-- </snapshotRepository>-->
</distributionManagement>
PS:外层还有个project标签,注意id要与上面的serve中的id一致!
这里如果你配置了snapshotRepository
,当你当前的pom文件版本带有snapshot
后缀,就会上传到snapshotRepository
对应的仓库里
使用maven命令进行发布jar包,注意项目路径:
mvn deploy
或者直接点右侧的maven菜单也可以进行
这里需要注意的是,如果你的pom文件里的版本是有snapshot结尾,发布后会jar包会出现在maven-snapshots
仓库中
出现问题
1.出现405错误
因为仓库用的不是host类型的,所以导致的错误,更换仓库地址即可解决问题
2.上传出现400问题
错误如下提示:
Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project mydemo: Failed to deploy artifacts: Could not transfer artifact site.starsone:mydemo:jar:1.0-20230105.091429-1 from/to myLocalRepo (http://localhost:9888/repository/maven-releases/): Transfer failed for http://localhost:9888/repository/maven-releases/site/starsone/mydemo/1.0-SNAPSHOT/mydemo-1.0-20230105.091429-1.jar 400 Repository version policy: RELEASE does not allow version: 1.0-20230105.091429-1
解决方案:
由于当前的pom里面的版本带有关键字snapshots
,而上传的仓库只能接收release版本的,所以导致的错误
将版本的snapshots关键字删除即可解决问题
3.重复发布版本失败
当你发布了一个1.0版本后,然后更改了代码,想重