nexus3 无法上传release与snapshot版本问题与解决方法
说明:nexus的存储库分为3种型:
proxy: 代理类型,用来代理官方或者第三方的存储库。
hosted: 我们自己的存储库,我们自己上传的包就在这个存储库下面
group: 存储库组,类似于文件夹,包含一个或多个proxy及hosted类型的存储库。我们只需要在maven里配置它的url,就可以访问它包含的所有存储库
阿里云的公用仓库地址见官网: https://maven.aliyun.com/mvn/guide
文章目录
1. 选择hosted类型的存储库上传
上传jar包时不能指定group的url,必须要指定hosted的url
2.检查存储库的部署策略:
release版建议选择Disable redeploy
表示同版本号不能重新部署,只能上传一次
snapshot版建议选择Allow redeploy
表示允许更新
3. 检查jar包版本号
release包的版本号不能以 SNAPSHOT
结尾,否则会拒绝
snapshot包的版本号必须以SNAPSHOT
结尾,否则也会被拒绝
4. 检查mavensettings.xml
文件配置
上传jar必须要授权
<servers>
<server>
<id>maven-snapshots</id>
<username>admin</username>
<password>xxx</password>
</server>
<server>
<id>maven-releases</id>
<username>admin</username>
<password>xxx</password>
</server>
</servers>
说明: id要和上传时指定的存储库id对应,见后面的两种上传方式
5. 两种上传jar包方式
5.1 mavn指令上传
适合只有jar包的情况
# 上传快照版本
mvn deploy:deploy-file -DgroupId=com.test -DartifactId=tdd -Dversion=1.0.0-SNAPSHOT -Dpackaging=jar -Dfile=D:\tdd\tdd-1.0.0-SNAPSHOT.jar -Durl=http://192.168.10.30:8081/repository/maven-snapshot/ -DrepositoryId=maven-snapshot
# 上传发布版本
mvn deploy:deploy-file -DgroupId=com.test -DartifactId=tdd -Dversion=1.0.0 -Dpackaging=jar -Dfile=D:\tdd\tdd-1.0.0.jar -Durl=http://192.168.10.30:8081/repository/maven-releases/ -DrepositoryId=maven-releases
# 参数说明
-DgroupId: 组织名
-DartifactId: 项目名
-Dversion: 版本号 快照版本要带 SNAPSHOT 后缀
-Dpackaging: 打包方式
-Dfile:本地文件路径
-Durl: hosted类型的存储库url
-DrepositoryId: 与maven的 settings.xml 文件里面配置的 <server>标签下的<id>相同。 见第4点
建议将jar复制到非本地仓库目录, 我之前遇到放在本地仓库的jar无法部署情况
5.2 maven项目上传jar
适合有pom文件的项目
pom.xml文件添加如下内容。也要注意id与第 4点配置的id相同
<distributionManagement>
<repository>
<id>maven-releases</id>
<name>NexusReleases</name>
<url>http://192.168.10.30:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<name>NexusSnapshots</name>
<url>http://192.168.10.30:8081/repository/maven-snapshot/</url>
</snapshotRepository>
</distributionManagement>
然后:
mvn deploy
6. maven启用快照版本,配置更新策略
<!-- 第4点介绍的服务器认证配置 -->
<servers>
<server>
<id>maven-snapshots</id>
<username>admin</username>
<password>xxx</password>
</server>
<server>
<id>maven-releases</id>
<username>admin</username>
<password>xxx</password>
</server>
</servers>
<!-- 我配置的镜像,使用group类型的仓库 -->
<mirrors>
<mirror>
<id>maven-public</id>
<name>nexus</name>
<url>http://192.168.10.30:8081/repository/maven-public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<profiles>
<profile>
<id>allow-snapshots</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>maven-public</id>
<url>http://192.168.10.30:8081/repository/maven-public/</url>
<!-- 启用发布版本 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 启用快照版本 -->
<snapshots>
<enabled>true</enabled>
<!--
更新策略
always: 每次使用maven指令构建项目都会去nexus下载最新的快照版本
daily: 默认值, 每天更新一次
interval:X, X表示更新的时间间隔,单位分钟
never: 不更新
-->
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>