软件准备
这边也是直接给出下载的地址: https://www.sonatype.com/download-oss-sonatype,如果下载不了,可以在百度网盘中下载
链接:https://pan.baidu.com/s/1fYJdSehWDLNqGdiSCuhTCQ
提取码:812g
下载后解压文件
nexus启动
进入 nexus-3.18.1-01-win64\nexus-3.18.1-01\bin,打开cmd窗口,输入命令:nexus /run
等待一段时间后出现
访问 nexus 仓库
在浏览器中输入 localhost:8081 默认用户名和密码是: admin,默认密码:admin123,
或者在
修改密码
这不重要,下一步
仓库相关配置
maven仓库类型只有3中,分别是: hosted、proxy、group
- hosted:宿主类型 内部项目的发布仓库,专门用来存储我们自己生成的jar文件
- proxy:代理类型 从远程中央仓库中寻找数据的仓库,如可配置阿里云maven仓库
- group:组类型 组仓库用来方便我们开发人员进行设置的仓库
简单来说: group = hosted+proxy
版本类型
release:专用于部署发布版本的jar
snapshot:专用于部署快照版本的jar,jar都是以-SNAPSHOT结尾,pom中version需以-SNAPSHOT**(必须大写)结尾**
mixed:可包含release和snapshot版本
权限管理
数据权限:repository权限有两种类型:
repository admin
repository view
每种类型又有6种权限标识,分别是:*,add,browse、delete、edit、read,*包含其它5种权限,也可以自定义操作标识,正常系统的生成权限足够使用
增加阿里代理仓库
第一步
第二步
第三步
阿里云地址:http://maven.aliyun.com/nexus/content/groups/public/
其他值默认。提交之后
效果图,如下
项目中配置
第一步:打开 maven conf 文件夹下的 settings.xml
第二步:
在 找到这个标签下,添加
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshot</id>
<username>admin</username>
<password>admin123</password>
</server>
配置之后,如下图
第三步:打开你的maven项目
配置远程仓库地址,在你的poml文件中加入
<repositories>
<!-- 配置nexus远程仓库 -->
<repository>
<id>nexus</id>
<name>Nexus Snapshot Repository</name>
<url>http://127.0.0.1:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
相关内容解释
<repositories>的配置,你可以在它下面添加多个<repository> ,
每个<repository>都有它唯一的ID,一个描述性的name,以及最重要的,远程仓库的url。
此外,
<releases><enabled>true</enabled></releases>告诉Maven可以从这个仓库下载releases版本的构件
<snapshots><enabled>false</enabled></snapshots>告诉Maven不要从这个仓库下载snapshot版本的构件。
注意:禁止从公共仓库下载snapshot构件是推荐的做法,因为这些构件不稳定,且不受你控制,你应该避免使用。当然,如果你想使用局域网内组织内部的仓库,你可以激活snapshot的支持。
第四步:加入distributionManagement节点
poml 文件 加入
<distributionManagement>
<repository>
<id>releases</id>
<name>User Project Release</name>
<url>http://127.0.0.1:8081/repository/maven-releases</url>
</repository>
<snapshotRepository>
<id>snapshot</id>
<name>User Project SNAPSHOTS</name>
<url>http://127.0.0.1:8081/repository/maven-snapshots</url>
</snapshotRepository>
</distributionManagement>
注意点:项目中pom.xml 文件下的:distributionManagement 下 -repository 标签下的id 要与 你maven的setting.xml文件中的 service id一致。如下图:
第五步:打包jar包到私有maven仓库
要注意:如果想要发布到远程仓库, 使用IDEA开发的话,打包不能用package,而要选择deploy。或者使用mvn命令:mvn clean deploy -xxx
注意:如果想发布到snapshot仓库中,则需要在版本号后加上-SNAPSHOT(注意这里必须是大写)
也就加粗样式是pom.xml文件中version 要改成 1.0-SNAPSHOT
<version>1.0-SNAPSHOT</version>
例子如下图
snapshot和release版本的区别
在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次。我们知道,maven的依赖管理是基于版本管理的,对于发布状态的artifact,如果版本号相同,即使我们内部的镜像服务器上的组件比本地新,maven也不会主动下载的。如果我们在开发阶段都是基于正式发布版本来做依赖管理,那么遇到这个问题,就需要升级组件的版本号,可这样就明显不符合要求和实际情况了。但是,如果是基于快照版本,那么问题就自热而然的解决了,而maven已经为我们准备好了这一切。喊一句:maven牛逼!
maven会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本。
如果是快照版本:
- 那么在发布包的时候mvn deploy时会自动发布到快照版本库中
- 而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。
如果是正式发布版本:
- 那么在发布包的时候mvn deploy时会自动发布到正式版本库中,
- 而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。
所以,我们在开发阶段,可以将公用库的版本设置为快照版本,而被依赖组件则引用快照版本进行开发,在公用库的快照版本更新后,我们也不需要修改pom文件提示版本号来下载新的版本,直接mvn执行相关编译、打包命令即可重新下载最新的快照库了,从而也方便了我们进行开发。
小插曲
在 depoly的时候报错
Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy (default-deploy) on project mapsturt: Failed to deploy artifacts: Could not transfer artifact com.szh:mapsturt:jar:0.0.1-20210701.035326-1 from/to snapshot (http://127.0.0.1:8081/repository/maven-snapshots): Transfer failed for http://127.0.0.1:8081/repository/maven-snapshots/com/szh/mapsturt/0.0.1-SNAPSHOT/mapsturt-0.0.1-20210701.035326-1.jar 401 Unauthorized
不一致。
改掉之后
匿名用户下载问题
这样就可以在项目中使用了,但是这样是不允许匿名用户下载的,会出现:
Could not transfer artifact from/to XXXXXX Not authorized
如果真要允许匿名用户能够下载,需要配置:若没有打钩,打钩就行了。
重复发布问题
重复发布的时候出现:
Return code is: 400, ReasonPhrase: Repository does not allow updating assets: maven-releases.
原因:经排查发现是因为重复发布导致的。maven私有仓库默认不允许重复部署。
设置一下:
- 如果出现400,需要注意项目下的pom.xml文件和maven使用的setting.xml文件的配置是否一致。
- 如果出现401,需要检查maven使用的setting.xml中的帐号和密码是否正确,相应的repository是否为“Allow
Redeploy”。 - 如果使用的intellij、eclipse或myeclipse需要注意ide中使用的setting.xml和maven命令行下的setting.xml是否一致;否则或出现许多莫名其妙的问题。