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

目录

    • 一、deploy - 推送到远程仓库
      • 1.1 命令语法:
      • 1.2 执行结果:
      • 1.3 可能遇到的问题
        • 问题1:with status code 401
        • 问题2:with status code 405
        • 问题3:Cannot deploy artifact from the local repository
    • 二、install - 推送到本地仓库
      • 1.1 命令语法:
      • 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 与命令行在同一级目录)

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 包上传到我的本地仓库中,命令如下:

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 页面上是支持直接上传依赖的,如下所示:

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

  • 《Maven(二)高级操作(分模块开发、聚合、继承、属性、版本管理、资源配置、多环境开发配置、跳过测试、Nexus远程仓库)》

整理完毕,完结撒花~ 🌻

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/885231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言心型代码解析

方法一 心型极坐标方程 爱心代码你真的理解吗 笛卡尔的心型公式&#xff1a; for (y 1.5; y > -1.5; y - 0.1) for (x -1.5; x < 1.5; x 0.05) 代码里面用了二个for循环&#xff0c;第一个代表y轴&#xff0c;第二个代表x轴 二个增加的单位不同&#xff0c;能使得…

JVM 由多个模块组成,每个模块负责特定的功能

Java虚拟机&#xff08;JVM, Java Virtual Machine&#xff09;是一个抽象的计算机&#xff0c;它提供了一个运行环境&#xff0c;使得Java字节码可以在不同的平台上执行。JVM 由多个模块组成&#xff0c;每个模块负责特定的功能。以下是 JVM 的主要模块及其功能&#xff1a; …

Java 中基于优先级执行任务的线程池实现

在日常开发中&#xff0c;我们经常遇到这样一种需求&#xff1a;需要按照任务的优先级顺序来执行&#xff0c;而不是简单的先进先出&#xff08;FIFO&#xff09;。Java 提供了 PriorityBlockingQueue&#xff0c;这是一个基于优先级排序的线程安全队列&#xff0c;可以用于实现…

CES2025展会媒体发布现场邀约采访计划来啦!海外科技电子媒体报纸新闻宣传方案

【本篇由 言同数字全球媒体投放 原创】一、CES 2025 展会概述 CES&#xff08;国际消费电子展&#xff09; 是全球规模最大、最具影响力的消费电子展会之一&#xff0c;由美国消费技术协会&#xff08;CTA&#xff09;主办。每年1月&#xff0c;CES吸引来自全球各地的行业领袖…

Axure设计之三级联动选择器教程(中继器)

使用Axure设计三级联动选择器&#xff08;如省市区选择器&#xff09;时&#xff0c;可以利用中继器的数据存储和动态交互功能来实现。下面介绍中继器三级联动选择器设计的教程&#xff1a; 一、效果展示&#xff1a; 1、在三级联动选择器中&#xff0c;首先选择省份&#xff…

【1】 Kafka快速入门-从原理到实践

文章目录 🔍 一、引言📜 二、Kafka 的历史🏗️ 三、Kafka 的核心结构🖥️ (一)Broker📋 (二)Topic📄 (三)Partition📤 (四)Producer📥 (五)Consumer🐒 (六)Zookeeper💡 四、Kafka 的重点概念📨 (一)消息📏 (二)偏移量(Offset)🔄 (…

使用Docker-Compose安装redis,rabbitmq,nacos,mysql,nginx,tomcat,portainer组件教程

因为开发经常会用到一些组件&#xff0c;又不想在本地启动&#xff0c;所以买了个服务器&#xff0c;然后将这些组件都安装到服务器上以便开发使用。下面就记录下使用docker-compose安装组件的教程以及一些需要注意的地方。 关于docker和docker-compose的安装在另一篇博客中有…

安装PyG

PyG安装 官方链接 Installation — pytorch_geometric documentation (pytorch-geometric.readthedocs.io) 安装步骤&#xff1a; 步骤一&#xff1a;安装Anaconda和CUDA 安装Anaconda-CSDN博客安装CUDA-CSDN博客 步骤二&#xff1a;查看支持的Python版本 步骤三&#xf…

如何在Linux中使用Cron定时执行SQL任务

文章目录 前言一、方案分析二、使用步骤1.准备脚本2.crontab脚本执行 踩坑 前言 演示数据需要每天更新监控数据&#xff0c;不想手动执行&#xff0c;想到以下解决方案 navicat 创建定时任务java服务定时执行linux crontab 定时执行sql脚本 一、方案分析 我选择了第三个方案…

夜天之书 #103 开源嘉年华纪实

上周在北京参与了开源社主办的 2024 中国开源年会。其实相比于有点明显班味的“年会”&#xff0c;我的参会体验更像是经历了一场中国开源的年度嘉年华。这也是在会场和其他参会朋友交流时共同的体验&#xff1a;在开源社的 COSCon 活动上&#xff0c;能够最大限度地一次性见到…

鸿蒙开启无线调试

DevEco Studio没找到通过WI-FI连接手机的可视化操作按钮&#xff0c;就去官网看了下hdc - TCP连接场景 操作也比较简单&#xff1a; 第1步&#xff1a;PC通过USB连接手机/平板&#xff1b; 第2步&#xff1a;在手机/平板的“开发者选项”中打开“无线调试”并记录下IP和端口…

Android Handler

Handler用于多线程消息分发和处理。与handler相关的几个对象&#xff1a;Message, Looper&#xff0c;MessageQueue, ThreadLocal. Handler是Message的消费者。 MessageQueue是容器。 Looper是整个Message分发的驱动。 Handler中有多种发送消息的方法&#xff0c;其中postxx…

C语言操作符详解(下)

⽬录 1. 单⽬操作符 2. 逗号表达式 3. 下标访问[]、函数调⽤() 4. 结构成员访问操作符 5. 操作符的属性&#xff1a;优先级、结合性 6. 表达式求值 一 单⽬操作符 1 分类 &#xff01;、 、 -- 、 & 、 * 、 、 - 、 ~ 、 sizeof 、 ( 类型 ) 1.1 "&q…

【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!

数据集介绍 【数据集】道路事故识别数据集 8939 张&#xff0c;目标检测&#xff0c;包含YOLO/VOC格式标注。数据集中包含2种分类&#xff1a;{0: accident, 1: non-accident}。数据集来自国内外图片网站和视频截图。检测范围道路事故检测、监控视角检测、无人机视角检测、等&…

跑批为什么这么难

业务系统产生的明细数据通常要经过加工处理&#xff0c;按照一定逻辑计算成需要的结果&#xff0c;用以支持企业的经营活动。这类数据加工任务一般会有很多个&#xff0c;需要批量完成计算&#xff0c;在银行和保险行业常常被称为跑批&#xff0c;其它像石油、电力等行业也经常…

C++类型推导decltype和auto

auto用于变量声明时根据表达式自动推导其类型 int x 10; auto y x; // y 的类型是 int double a 5.5; auto b a * 2; // b 的类型是double decltype 是 C11 引入的一个关键字&#xff0c;用于查询表达式的类型。它允许编译器在编译时推断出一个表达式的类型&#xff0c;…

Flutter 鸿蒙next 中使用 MobX 进行状态管理

Flutter & 鸿蒙next 中使用 MobX 进行状态管理 在应用开发中&#xff0c;状态管理是一个至关重要的环节&#xff0c;特别是在复杂的Flutter或鸿蒙next项目中。状态的变化往往会影响UI的更新&#xff0c;因此&#xff0c;选择一种高效、灵活的状态管理工具显得尤为重要。Mo…

A012-基于Spring Boot的私房菜定制上门服务系统的设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统私房菜定制上门服务系统信息管理难度大&#xff0c;容错率…

配有生物振膜的FPS电竞耳机,血手幽灵M760,精准定位每一声脚步

在PC上玩游戏的时候&#xff0c;一款高性能的游戏耳机是提升游戏体验的关键&#xff0c;特别是在吃鸡等FPS类游戏中&#xff0c;耳机不仅是听觉享受的工具&#xff0c;更是决定胜负的关键装备。如果耳机的环绕立体声效果能够及时准确的做出反应&#xff0c;我在游戏中就能清晰地…

状态模式(State Pattern)详解

1. 引言 在很多软件系统中&#xff0c;对象的行为往往依赖于其内部状态&#xff0c;而状态的变化又会影响对象的行为。状态模式&#xff08;State Pattern&#xff09;为解决这一问题提供了一种优雅的方法。通过将状态的行为封装到独立的状态对象中&#xff0c;可以使得对象在…