73人参与 • 2025-03-16 • ar
在日常java开发中,maven私服作为团队协作的核心枢纽,承载着版本依赖分发的重任。然而,当某天发现私服中关键jar包离奇丢失,而本地仓库仍保留着历史构建文件时,如何快速从本地“复活”缺失的依赖?此时,如何快速将本地仓库中的 jar 包重新发布到私服,成为恢复构建环境的关键。本文将详细介绍如何使用 mvn deploy:deploy-file 命令将本地仓库中的 jar 包发布到私服,并分享在此过程中可能遇到的问题及其解决方案,帮助开发者高效解决类似问题。
配置 maven 的 settings.xml 文件,在配置文件中添加2个 server节点,并输入 nexus 的用户名和密码。配置中的id要记住命令中需要使用。
<servers> <server> <id>snapshots</id> <username>admin</username> <password>******</password> </server> <server> <id>release</id> <username>admin</username> <password>******</password> </server> </servers>
以下命令都是基于cmd,方便查看都用了^将命令分为多行。mvn配置不光在maven安装目录下,还有用户的环境配置。
执行命令前避免其它配置干扰,最好把只保留maven目录下的配置。
cd /d d:\temp\maven\
上传的包版本决定,上传路径和使用repoitoryid值。-durl参数的实际路径需要在私服中自己找~~~,配置错了就各种错!!!
-drepositoryid参数值需要和settings.xml的server id节点值一至。
snapshot包参数
release包参数
待上传的jar包如果有对应pom文件,pom中的maven坐标没有引用变量时,比较省事指定一个-dpomfile就可以了
# 指定pomfile参数时,不需要填写groupid、artifactid、version三个参数 mvn -e deploy:deploy-file ^ -dfile=./mydtemo-2025.3.7.jar ^ -dpomfile=./mydtemo-2025.3.7.pom ^ -dpackaging=jar ^ -durl=https://nexus.demo.com/nexus/content/repositories/releases/ ^ -drepositoryid=releases
如果没有pom文件就需要手动指定maven坐标,仔细点儿否则容易出错,导致拉取依赖找不到包。
# 无pom文件时,需要填写groupid、artifactid、version三个参数 mvn -e deploy:deploy-file ^ -dfile=./mydtemo-2025.3.7.jar ^ -dgroupid=com.mydemo.test ^ -dartifactid=mydtemo ^ -dversion=2025.3.7 ^ -dpackaging=jar ^ -durl=https://nexus.demo.com/nexus/content/repositories/releases/ ^ -drepositoryid=releases
如果是snapshot包,参数稍微有点儿区别。这里还有个场景就是指定-dclassifier参数,在 maven 中,classifier 属性用于区分同一 artifact 的不同版本或变种。通常,一个 artifact 由 groupid、artifactid 和 version 三个基本元素确定。然而,在某些情况下,我们可能需要为同一个 artifact 创建多个不同的版本或变种,比如源代码包、文档包或特定平台的二进制包等。
# 指定classifier参数,向snapshot仓发布jar包 mvn -e deploy:deploy-file ^ -dfile=./mydtemo-spring-1.0.11-snapshot-dto.jar ^ -dgroupid=com.mydemo.test ^ -dartifactid=mydtemo ^ -dversion=spring-1.0.11-snapshot ^ -dclassifier=dto ^ -dpackaging=jar ^ -durl=https://nexus.demo.com/nexus/content/repositories/snapshots/ ^ -drepositoryid=nexus-snapshots
如果只是上传pom文件,file参数也需要指定。
cd /d d:\temp\maven\ # 只上传pom文件 mvn -e deploy:deploy-file ^ -dfile=./mydemo-1.2.0.pom ^ -dpomfile=./mydemo-1.2.0.pom ^ -durl=https://nexus.demo.com/nexus/content/repositories/releases/ ^ -drepositoryid=releases
上面如果顺利的话,已经上传到私服了,下面测试下拉取依赖,当然在idea中也可测试。
mvn -e dependency:get ^ -dartifact=mydtemo:com.mydemo.test:jar:2025.3.7
也可以指定配置文件,来取其它仓的依赖。
# 指定配置文件拉取 mvn dependency:get ^ -dartifact=mydemo:mydemo:pom:1.2.0 ^ -s d:\maven\apache-maven-3.3.9\conf\settings.xml
如果懒得去本地仓中翻找,可以指定下载地址,测试时打开一个目录就可以了。
# 指定下载目录(先下载到本仓之后在copy到-ddest指定的目录中) mvn -e -x dependency:get ^ -dartifact=com.mydemo.test:mydtemo:2025.3.7 ^ -drepourl=https://nexus.demo.com/nexus/content/repositories/releases/ ^ -ddest=e:\downloads\mvn-test
mvn deploy:deploy-file
是 maven 提供的一个命令,用于将本地文件(如 jar 包或 pom 文件)直接上传到 maven 私服(如 nexus 或 artifactory)。以下是该命令的详细参数说明:
mvn deploy:deploy-file
这是 maven 的命令名称,用于将本地文件上传到远程仓库。作用:指定要上传的 jar 文件路径。
说明:
示例:
-dfile=target/my-artifact-1.0.0.jar
作用:指定与 jar 包对应的 pom 文件路径。
说明:
-dfile
和 -dpomfile
。-dpomfile
。示例:
-dpomfile=pom.xml
作用:指定要上传的文件类型。
说明:
jar
和 pom
。jar
;上传 pom 文件时,类型为 pom
。示例:
-dpackaging=jar
作用:指定要上传的 nexus 仓库地址。
说明:
status code 400
异常。示例:
-durl=http://nexus.example.com/repository/maven-releases/
作用:指定使用的仓库 id。
说明:
settings.xml
文件中的 <server>
配置的 id
一致。status code 405
异常。示例:
-drepositoryid=my-nexus-repo
说明:
groupid
、artifactid
和 version
信息正确,否则可能导致上传失败或路径错误。以下是一个完整的示例命令,将本地 jar 包和 pom 文件上传到 nexus 私服:
mvn deploy:deploy-file \ -dfile=target/my-artifact-1.0.0.jar \ -dpomfile=pom.xml \ -dpackaging=jar \ -durl=http://nexus.example.com/repository/maven-releases/ \ -drepositoryid=my-nexus-repo
原因:上传的 jar 包类型与仓库类型不匹配(例如将 releases 包上传到 snapshots 仓库)。
解决:检查 -durl
参数,确保上传到正确的仓库。
详情:
[error] failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy-file (default-cli) on project standalone-pom: failed to deploy artifacts: could not transfer artifact com.mydemo.test:**mydemo:jar:2025.3.7 from/to releases (https://com.mydemo.test/nexus/content/repositories/public/): failed to transfer file: https://com.mydemo.test/nexus/content/repositories/public/com/com/mydemo/**mydemo/2025.3.7/**mydemo-2025.3.7.jar. return code is: 400, reasonphrase: bad request.
-drepositoryid
与 settings.xml
中的 <server>
配置不匹配。settings.xml
文件,确保 id
一致。[error] failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy-file (default-cli) on project standalone-pom: failed to deploy artifacts: could not transfer artifact com.mydemo.test:**mydemo:jar:2025.3.7 from/to releasesx (https://com.mydemo.test/nexus/content/repositories/releases/): failed to transfer file: https://com.mydemo.test/..../....jar. return code is: 401, reasonphrase: unauthorized.
groupid
、artifactid
或 version
信息错误。原因:上传仓库需要认证,但未配置正确的用户名和密码。
解决:在 settings.xml
中配置 <server>
的认证信息。
错误详情:
[error] failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy-file (default-cli) on project standalone-pom: failed to deploy artifacts: could not transfer artifact com.mydemo.test:**mydemo:jar:2025.3.7 from/to releases (https://com.mydemo.test/nexus/content/repositories/releases/): failed to transfer file: https://com.mydemo.test/..../....jar. return code is: 401, reasonphrase: unauthorized.
需要把本地仓的jar包复制到其它目录。
[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: d:\java\maven\maven_repo\com\mydemo\test\**mydemo\2025.3.7\**mydemo-2025.3.7.jar
mvn deploy:deploy-file
是将本地 jar 包或 pom 文件上传到 maven 私服的重要命令。通过正确配置 -dfile
、-dpomfile
、-durl
和 -drepositoryid
等参数,可以高效完成上传任务。同时,注意仓库类型、权限和 pom 文件信息的正确性,避免常见错误。有时候maven版本高或者第也会导致上传失败。
到此这篇关于使用mvn deploy命令上传jar包的文章就介绍到这了,更多相关mvn deploy上传jar包内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论