一 搭建本地仓库
1.本地搭建 Maven 仓库可以使用 Nexus、Artifactory 等工具,这里以 Nexus 为例进行说明。
下载地址:https://help.sonatype.com/repomanager3/product-information/download/
双击bin目录下的执行文件 nexus.exe
介绍:
仓库类型: proxy 代理仓库 比如代理到maven中央仓库。
hosted 宿主仓库 即自己的私人仓库。
group 仓库组 由多个仓库组成,当要下载依赖时会遍历每个仓库去找。
仓库格式: maven2 --java
nuget 不关注了
其实能猜到我们使用最多的就是仓库组,可以把代理仓库、releases 和shapshots一起放进去,这样就完美实现:能从私服下载依赖,找不到还能去代理仓库那找。我们只需要在本地maven中配置下载镜像从私服上的仓库组下载就行了。
创建仓库:
创建阿里代理仓库,加速访问。
阿里仓库地址:https://maven.aliyun.com/nexus/content/groups/public
创建完成后,把这个仓库放到仓库组里面,可以将ali的代理仓库放第一位。
上传依赖
首先找到本地maven的setting.xml
,打开后找到servers
标签。加入以下内容
<servers>
<!-- 这是配置访问私有仓库的用户名密码 -->
<server>
<!-- id标签可以随便填,只需要在servers中唯一即可,后面很多地方会使用该id -->
<id>yuting-maven</id>
<username>admin</username>
<password>123456</password>
</server>
</servers>
用户名密码可在nexus设置中去创建用户,分配对应全新,不建议使用admin账号。
maven配置好了,接下来去maven项目中设置:
在你想上传的模块的pom文件中,写入:
<distributionManagement>
<repository>
<id>self-maven</id>
<url>http://ip:port/repository/maven-releases/</url><!--发行仓库地址-->
</repository>
<snapshotRepository>
<id>self-maven</id>
<url>http://ip:port/repository/maven-snapshots/</url><!--快照仓库地址-->
</snapshotRepository>
</distributionManagement>
- repository标签是代表上传release版本
- snapshotRepository标签代表上传snapshot版本
会根据该模块的版本进行自动选择,如果你的版本号带有SNAPSHOT
如:<version>0.0.1-SNAPSHOT</version>
,那么会上传到SNAPSHOT
仓库,release也是这个道理,如果版本号不存在这两个单词,如1.0.0
,那么会选择release
仓库上传。
标签中的 id,就是上面我们配置的server id,maven会通过这个id去server中拿用户名密码去访问私服仓库。
标签中的url,就是对应仓库的地址:仓库的url复制即可,注意对应仓库,弄反了是传不上去的
ok,针对上传,我们已经配置好了,那么如何上传呢?
在idea右侧,maven中,选择要上传的模块,点击deploy(发布)
即可
会先下载一些东西,然后上传。
发布后,在对应的仓库也能查看,我这里是snapshot仓库:
上传到这里就可以了,但有一点需要注意的是,release
仓库需要把
设置为Allow redeploy
代表允许我们对仓库中的依赖维护升级新版本,如果设置为disable redeploy
意味着我们无法将升级版本上传上来。
下载依赖
接下来,配置本地maven。
还是打开setting.xml
,找到mirrors
标签。
然后添加一个mirror
标签:
<mirror>
<id>nexus-yuting</id>
<name>nexus-yuting</name>
<mirrorOf>*</mirrorOf>
<url>http://127.0.0.1:8081/repository/maven-public//public/</url>
</mirror>
如果无法下载,pom文件中添加 distributionManagement标签,如下
<distributionManagement>
<repository>
<id>self-maven</id>
<url>http://ip:port/repository/maven-releases/</url><!--发行仓库地址-->
</repository>
<snapshotRepository>
<id>self-maven</id>
<url>http://ip:port/repository/maven-snapshots/</url><!--快照仓库地址-->
</snapshotRepository>
</distributionManagement>
之前阿里的镜像可以注释了,
添加的镜像:
- id 之前server的id,访问仓库组也要拿用户名密码
- mirrorOf *代表所有的依赖都从私服找
- url 就是仓库组的,还是去仓库组右边copy即可
到这里就能使用私服下载依赖了。
我们需要把之前创建的阿里镜像代理仓库放到仓库组中。
maven-public
这个仓库组,把ali代理仓库加进去就行了:
注意
关于nexus代理仓库状态
online-remote available
表示该被代理仓库可用
online-ready to connect
并不是代理仓库用不了。而是你根本还没有一个依赖去访问这个被代理仓库,nexus也不知道这个被代理仓库能不能用,所以它只能展示为待连接状态:
该配置:表示代理仓库会根据每次请求被代理仓库的响应来决定是否暂停请求这个被代理仓库,请求无响应就会block。
还有一个Blocked选项,直接阻止,相当于禁用该代理仓库。一般选择auto就行了。
所以 online-ready to connect
并不是仓库出现了问题。
新建的代理仓库都是 online-ready to connect
状态。