背景
项目组一个生产项目,依赖了之前老版本的 snapshot 包,maven 仓库经过迁移,不知道是否做了 snapshot 删除策略或者人为删除,导致部分 snapshot 依赖包不存在,生产项目依赖 snapshop 版本运行稳定,原开发人员本地有旧 snapshot jar 包,不想冒替换 release 版本的风险,故需将 snapshot 版本上传到 maven 仓库,供后续开发人员拉取使用。
上传 SNAPSHOT 版本
1. Maven 环境准备
下载 maven 安装包,解压后配置好 path 环境变量。
2. 配置 maven 的 settings.xml
在 maven 安装目录找到 conf/settings.xml
,在 settings 标签下配置以下内容。
settings.xml
需要放置在~/.m2/settings.xml
(~
代表操作系统用户的 Home 目录,windows 下类似C:\Users\Ivan
)
<!-- 在 settings 标签下配置以下内容 -->
<servers>
<server>
<!-- repositoryId,上传 SNAPSHOT jar 时需要指定此 id -->
<id>snapshots</id>
<!-- nexus 账号密码 -->
<username>admin</username>
<password>admin</password>
</server>
</servers>
3. 上传 Nexus3 本地 jar 和 pom.xml
用管理员权限打开 cmd
命令窗口,cd 到在第三方 jar 包所在目录下,输入以下命令(如果打开的时 PowerShell ,键入 cmd 字符回车切换到 cmd 命令下执行脚本)
- 上传 jar 包和 pom 文件命令
其中行尾
^
未 cmd 命令行的换行符,相当于 Linux 里的\
mvn deploy:deploy-file^
-DgroupId=com.lizwei^
-DartifactId=mrdoc^
-Dversion=1.0.0-SNAPSHOT^
-Dpackaging=jar^
-Dfile=mrdoc-1.0.0-SNAPSHOT.jar^
-DpomFile=mrdoc-1.0.0-SNAPSHOT.pom^
-Durl=http://nexus.lizwei.com/repository/maven-snapshots/^
-DrepositoryId=snapshots -X
有时候只需要上传 pom 文件(如 maven 父工程),使用以下命令即可
mvn deploy:deploy-file^ -DgroupId=com.lizwei^ -DartifactId=mrdoc^ -Dversion=1.0.0-SNAPSHOT^ -Dpackaging=pom^ -Dfile=mrdoc-1.0.0-SNAPSHOT.pom^ -Durl=http://nexus.lizwei.com/repository/maven-snapshots/^ -DrepositoryId=snapshots -X
- 命令参数简介
-DgroupId=com.lizwei # com.lizwei 为要上传的 jar 包 groupId
-Dversion=1.0.0-SNAPSHOT # 1.0.0-SNAPSHOT 为要上传的 jar 包版本号
-Dpackaging=jar # 上传文件类型,pom 或者 jar
-Dfile=mrdoc-1.0.0-SNAPSHOT.jar # mrdoc-1.0.0-SNAPSHOT.pom 为要上传的 jar 包 / pom 名称
-DpomFile=mrdoc-1.0.0-SNAPSHOT.pom # 要上传的 pom 文件
-Durl=http://nexus.lizwei.com/repository/maven-snapshots/ # 远程 Nexus 私服仓库地址,可在 nexus web 浏览仓库页面,点击 copy URL 的按钮获取到
-DrepositoryId=snapshots # nexus-snapshot 为我们第 2 步配置的本地 maven conf/settings.xml 文件中其中一个 server 的 id,nexus 上传 jar 需要用这种方式验证账号密码
-X # debug 模式执行 mvn 命令,方便查看异常日志
4. 检查 nexus 的 maven-snapshots 仓库 jar 是否已上传成功
常见错误
[ERROR] The goal you specified requires a project to execute but there is no POM in this directory...
解决方案:
cmd 命令必须用管理员权限打开,如果打开的是 powershell,请输入 cmd 命令切换到 cmd 下执行
[ERROR] Failed to execute goal
org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy-file
(default-cli) on project standalone-pom: Cannot deploy artifact from the local repository
解决方案:
不能在本地 maven 仓库中直接运行上传命令,jar 包需要挪动 .m2/repository
目录外上传
注意事项
上传本地 jar 包时最好同时上传对应的 pom 文件,否则 jar 包依赖不会传递
辅助工具
【腾讯文档】Nexus上传命令辅助工具
https://docs.qq.com/sheet/DT1JGeEdsSUxQcE9O?tab=BB08J2
评论区