Maven(六)mvn 命令将 jar 包推送到 远程/本地仓库

目录

    • [一、deploy - 推送到远程仓库](#一、deploy - 推送到远程仓库)
      • [1.1 命令语法:](#1.1 命令语法:)
      • [1.2 执行结果:](#1.2 执行结果:)
      • [1.3 可能遇到的问题](#1.3 可能遇到的问题)
        • [问题1:with status code 401](#问题1:with status code 401)
        • [问题2:with status code 405](#问题2:with status code 405)
        • [问题3:Cannot deploy artifact from the local repository](#问题3:Cannot deploy artifact from the local repository)
    • [二、install - 推送到本地仓库](#二、install - 推送到本地仓库)
      • [1.1 命令语法:](#1.1 命令语法:)
      • [1.2 执行结果:](#1.2 执行结果:)
    • 三、补充:页面操作

背景:

我们在使用 Maven 仓库管理 Java 依赖的时候,可能会使用到自定义的 sdk工具包,如果我们想共享这个 sdk 就需要将他上传到公司的 Maven 远程仓库中,这样大家就可以自动拉取了。

那么怎么将本地的 jar 包推送到远程仓库呢?其实非常简单,我们来看下。

一、deploy - 推送到远程仓库

1.1 命令语法:

mvn deploy:deploy-file -Dfile=文件路径 -DgroupId=所属组ID -DartifactId=项目ID -Dversion=版本号 -Dpackaging=打包形式 -Durl=上传仓库路径 -DrepositoryId=仓库名称

示例:这里我将一个 kettle 的 jar 包上传到我刚创建好的 my-release 仓库中,命令如下:

(kettle-core-7.1.0.0-12.jar 与命令行在同一级目录)

shell 复制代码
mvn deploy:deploy-file \
    -Dfile=kettle-core-7.1.0.0-12.jar \
    -DgroupId=pentaho-kettle \
    -DartifactId=kettle-core \
    -Dversion=7.1.0.0-12 \
    -Dpackaging=jar \
    -Durl=http://localhost:8081/repository/my-release \
    -DrepositoryId=my-release

1.2 执行结果:

1.3 可能遇到的问题

问题1:with status code 401
  • 出现报错:with status code 401。详细报错如下所示:

原因分析:

  • 401 是因为没有权限报错,这里的权限是根据 -DrepositoryId=仓库名称 配置中的 仓库名称 决定的。执行 mvn deploy 的时候,会根据 仓库名称settings.xml 文件中寻找仓库对应的账号密码,如下所示:

解决方式:

  • 确认 -DrepositoryId=仓库名称 是否正确?当前账号是否拥有该仓库的权限?我这里是由于仓库名称写成 public 导致的,因为 <mirror> 中没有 public 对应的配置,所以报错了,将仓库名称修改为对应的 acgkaka 则恢复正常。
问题2:with status code 405
  • 出现报错:with status code 405。详细报错如下所示:

原因分析:

  • 405-Durl=-DrepositoryId= 中的仓库名称不一致导致的,例如:
    -Durl=http://nexus.acgkaka.cn/repository/public/
    -DrepositoryId=acgkaka
    其中 -Durl 指定的仓库为 public,而 -DrepositoryId 指定的仓库却为 acgkaka

解决方式:

  • -Durl=-DrepositoryId= 中的仓库名称修改一致即可。
问题3:Cannot deploy artifact from the local repository
  • 出现报错:Cannot deploy artifact from the local repository。详细报错如下所示:

原因分析:

  • 其实提示信息很明显了,不能从本地仓库直接 deploy 到远程仓库!

解决方式:

  • jar 包从本地仓库复制到任意其他目录,再进行 deploy 操作就可以成功了。

补充:Maven为什么不允许直接从本地仓库deploy到远程仓库?

主要在于 设计安全性 的考虑,有以下三个原因:
1. 安全性

防止意外覆盖:直接从本地仓库部署可能导致意外覆盖远程仓库中的现有工件,这可能会破坏依赖关系和构建过程。

确保一致性:通过构建过程生成的工件是经过验证和测试的,直接从本地仓库部署无法保证这些工件的一致性和可靠性。
2. 构建过程

确保可重复性:Maven 强调构建过程的可重复性。每次构建都应该从源代码开始,生成新的工件,而不是从本地仓库中直接部署。

确保完整性:构建过程中可以执行各种检查和测试,确保生成的工件是完整和正确的。
3. 最佳实践

标准化流程:Maven 的最佳实践是通过 mvn deploy 命令从 源代码 构建并部署工件,而不是从本地仓库中直接部署。

版本控制:通过构建过程生成的工件通常会带有版本号,这有助于版本控制和依赖管理。


二、install - 推送到本地仓库

1.1 命令语法:

mvn install:install-file -Dfile=文件路径 -DgroupId=所属组ID -DartifactId=项目名称 -Dversion=版本号 -Dpackaging=打包方式

示例:这里我将一个 kettle 的 jar 包上传到我的本地仓库中,命令如下:

shell 复制代码
mvn install:install-file \
	-Dfile=kettle-core-7.1.0.0-12.jar \
	-DgroupId=pentaho-kettle \
	-DartifactId=kettle-core \
	-Dversion=7.1.0.0-12 \
	-Dpackaging=jar

1.2 执行结果:


三、补充:页面操作

其实,除了命令操作之外,Nexus 页面上是支持直接上传依赖的,如下所示:

具体操作可以参考下文中的 第九章

整理完毕,完结撒花~ 🌻

相关推荐
跟着珅聪学java2 小时前
spring boot +Elment UI 上传文件教程
java·spring boot·后端·ui·elementui·vue
我命由我123452 小时前
Spring Boot 自定义日志打印(日志级别、logback-spring.xml 文件、自定义日志打印解读)
java·开发语言·jvm·spring boot·spring·java-ee·logback
lilye662 小时前
程序化广告行业(55/89):DMP与DSP对接及数据统计原理剖析
java·服务器·前端
战族狼魂5 小时前
CSGO 皮肤交易平台后端 (Spring Boot) 代码结构与示例
java·spring boot·后端
xyliiiiiL6 小时前
ZGC初步了解
java·jvm·算法
杉之7 小时前
常见前端GET请求以及对应的Spring后端接收接口写法
java·前端·后端·spring·vue
hycccccch7 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq
天天向上杰8 小时前
面基JavaEE银行金融业务逻辑层处理金融数据类型BigDecimal
java·bigdecimal
请来次降维打击!!!9 小时前
优选算法系列(5.位运算)
java·前端·c++·算法
用键盘当武器的秋刀鱼9 小时前
springBoot统一响应类型3.5.1版本
java·spring boot·后端