一个实用的 Maven localRepository 工具
目录
- 1 现状
- 2 当前解决
- 3 更好的解决
- 3.1 下载 Maven localRepository 工具包
- 3.2 上传本地 localRepository 包
- 3.3 清理 localRepository 中指定后缀的文件
1 现状
在使用 Maven 时,我们可能会经常与本地仓库和私服仓库打交道。
例如对于本地仓库,因为某些文件位拉取到,会在本地仓库的项目目录下产生 .lastUpdated 后缀的文件,有时编译项目时为了更快的重新再次拉取正确的包,还不得不手动清除这些文件。
而对于私服,如果是公司自己的私服,不巧的是公司的 Maven 私服(例如 Nexus)又无法访问外网,在公司内网使用公司私服编译项目时,我们期望上传上自己的依赖包(此时往往是很多的文件),就不得不手动一个一个上传,如果动手能力比较强的,可以根据对应环境编写一个小脚本执行。
2 当前解决
如果是在 Linux 服务,可以通过如下的 Shell 命令清除本地仓库下所有的 .lastUpdated 后缀的文件目录,但如果是 Windows 系统或者其他不支持 Shell 的系统,就不得不查找对应系统的查找和清除文件夹的命令了。
find ~/.m2/repository/ -regex ".*\.lastUpdated" | xargs dirname | xargs rm -rf
对于向自己私服发布包的情况,一般有两种方式,第一种是通过Maven 私服的管理页面提供的功能进行上传,第二种是通过 mvn deploy 命令上传。
对于本地系统安装了 maven 的,可以使用 Maven 命令上传,命令如下:
mvn -s /Users/yoreyuan/code/yore/settings.xml deploy:deploy-file \
-Dfile=/Users/yoreyuan/.m2/xxx/1.0.0/xxx-1.0.0.jar \
-DpomFile=/Users/yoreyuan/.m2/xxx/1.0.0/xxx-1.0.0.pom \
-Durl=http://nexus.yore.cn/repository/maven-releases \
-DrepositoryId=yore_nexus -X -Dpackaging=jar
如果顺利的话,非常清爽的成功了,但紧接着可能会遇到如下的问题:
【问题 1】如果包非常多,上面的命令一个一个执行简直是噩梦。对于会 Shell或 Python 的,则可能想到编写一个脚本。但如果不巧的是使用的是 Windows 系统的 Java 开发者,其开发环境没有 Shell 和 Python 如何上传呢?最终可能在公司找了一个Linux服务器,配上环境,把自己的本地的Maven localRepository 打包上传到公司服务器上,然后又编写脚本,执行脚本,循环上传这些包,最终费了好大劲终于上传上了,短暂的开心后,突然却又遇到了下面的问题。
【问题 2】使用公司的私服来编译自己项目时,竟然报缺包。经过排查,发现上面的命令仅仅上传了 jar 包,例如 xxx-tests.jar、xxx-sources.jar、xxx-test-sources.jar 和 xxx-linux-x86_64.exe 等都没有上传,对脚本熟悉的,可能马上花一些时间脚本就改好了,对于脚本不太熟悉的 java 开发者,可能就在一次一次报错中找到缺失的包,通过 Nexus 页面上传了,终于可以编译过了。自己非常非常的开心,于是把自己历尽千辛万苦实践可行的方法分享给公司其他小伙伴。

【问题 3】可运行了一段时间,在某天晚上流水线出包的时候突然自己的项目编译报错了,竟然提示有个包神奇的又找不到了。其实最苦恼还有,包编译出来了,运行却失败了,一通排查,竟发现依赖的某个包的版本使用的却是另外一个版本的包。望着一串串流水线异常日志,此时终于又陷入了沉思。
经过一段时间的排查,终于发现不知道是哪个大聪明(也许是自己)从新上传了某个依赖,在上传某个依赖的时候,没有上传项目的 pom 文件,而是直接勾选了 Nexus Upload 页面的 Generate a POM file with these coordinates,导致私服上项目中很重要的依赖的 pom 中依赖信息缺失。此时如果在没有显示引用依赖的情况下,可能会从其他依赖集成过来某个包,如果包存在就顺利编译成功了,但可能运行的时候发现类缺失、方法缺失等等异常,而如果包不存在则直接在流水线编译的时候就异常了。

所以面对这种情况,排查私服上 pom 文件,如果有缺失的,手动删除,单独上传完整的 pom 文件,如下图,jar 上传后(千万不要勾选 Generate a POM file with these coordinates),然后再上传一次 pom 文件(此时 GAV 信息是灰色的,直接上传即可)。

3 更好的解决
一路走来,坑坑洼洼,磕磕绊绊,细节那么多,怎么保证身边其他同事不会一不小心再犯同样的错呢?有没有更好的解决方案呢?
答案肯定是有滴,下面来介绍一个实用的工具 tools-maven-localRepository,这个项目是使用 go 语言编写的一个 Maven localRepository 工具。支持的操作系统有 Linux、Windows、Mac OS,可以直接指定本地 localRepository 路径即可将此路径下的所有包上传到 Maven 私服上,也支持清理 localRepository 中指定后缀的文件。
环境要求,系统中需要安装 JDK 和 Maven(对于 Java 开发,开发环境中一般都有,如果没有需要先安装配置下)
3.1 下载 Maven localRepository 工具包
使用也非常简单,访问 tools-maven-localRepository/releases/tag/v1.0.0

下载编译好的工具包 tools_maven_localRepository-bin.zip,解压,解压后目录如下
tools_maven_localRepository
├── config.yaml.template # 应用的配置文件模板
├── darwin-amd64 # Mac OS
│ └── tools_localRepo
├── linux-amd64 # linux OS
│ └── tools_localRepo
├── readme.md
├── settings.xml.template # Maven settings.xml 配置文件模板
└── windows-amd64 # Windows OS└── tools_localRepo
拷贝 settings.xml.template 为 settings.xml,简单配置如下信息(主要是 servers 中的私服账号信息):
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd"><!--localRepository>/home/yore/.m2/repository</localRepository--><pluginGroups></pluginGroups><proxies></proxies><servers><server><id>yore_nexus</id><username>yore</username><password>123456</password></server></servers><mirrors><mirror><id>yore_nexus</id><mirrorOf>*</mirrorOf><url>http://nexus.yore.cn/repository/maven-public</url></mirror></mirrors><profiles><profile><id>yore_nexus</id><repositories><repository><id>yore_nexus</id><name>yore nexus</name><url>http://nexus.yore.cn/repository/maven-public</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories></profile></profiles><activeProfiles><activeProfile>yore_nexus</activeProfile></activeProfiles>
</settings>
3.2 上传本地 localRepository 包
拷贝 config.yaml.template 为 config.yaml,简单配置如下信息:
# 是否输出项目的 debug 信息
verbose: false
logLevel: "INFO"# Maven localRepository 本地路径
localRepository: "~/.m2/repository"deploy:enable: truecommandName: "/usr/local/bin/mvn"# Alternate path for the user settings filesettingXml: "~/.m2/settings.xml"# The ID of the repositoryid: "yore_nexus"# The URL of the repository mavenurl: "http://nexus.yore.cn/repository/maven-releases"# Output maven debugging informationdebug: false# The list of file suffixes to be ignoredexcludeSuffixs:- ".DS_Store"- ".asc"- ".lastUpdated"- ".md5"- ".repositories"- ".sha1"- ".sha256"- ".sha512"- ".xml"clean:enable: false
主要关注如下几个配置
localRepository: Maven localRepository 本地路径deploy.enable: 启用 deploydeploy.settingXml: Maven 的 setting.xml 配置路径deploy.id: 私服仓库的 ID,需要与 setting.xml 中配置的私服账号 ID 一致deploy.url: 私服仓库的地址
执行如下命令开始上传
./tools_localRepo --config ./config.yaml
如果需要输出项目更详细的信息可以将 verbose 设置为 true,如果需要输出 Maven 执行的更详细的信息,可以将 deploy.debug 设置为 true。
3.3 清理 localRepository 中指定后缀的文件
拷贝 config.yaml.template 为 config.yaml,简单配置如下信息:
# 是否输出项目的 debug 信息
verbose: false
logLevel: "INFO"# Maven localRepository 本地路径
localRepository: "~/.m2/repository"deploy:enable: falseclean:# If it is in cleaning mode, the list of file suffixes that will be cleaned upenable: truesuffixs:- ".DS_Store"- ".lastUpdated"
主要关注如下几个配置
localRepository: Maven localRepository 本地路径deploy.enable: 关闭 deployclean.enable: 启用 cleanclean.suffixs: 需要清理 localRepository 中的后缀文件列表
执行如下命令开始上传
./tools_localRepo --config ./config.yaml
同样,如果需要输出项目更详细的信息可以将 verbose 设置为 true,如果需要输出 Maven 执行的更详细的信息,可以将 deploy.debug 设置为 true。
相关文章:
一个实用的 Maven localRepository 工具
目录 1 现状2 当前解决3 更好的解决3.1 下载 Maven localRepository 工具包3.2 上传本地 localRepository 包3.3 清理 localRepository 中指定后缀的文件 1 现状 在使用 Maven 时,我们可能会经常与本地仓库和私服仓库打交道。 例如对于本地仓库,因为某…...
目标检测,图像分割,超分辨率重建
目标检测和图像分割 目标检测和图像分割是计算机视觉中的两个不同任务,它们的输出形式也有所不同。下面我将分别介绍这两个任务的输出。图像分割又可以分为:语义分割、实例分割、全景分割。 语义分割(Semantic Segmentation)&…...
微信小程序 城市点击后跳转 并首页显示被点击城市
在微信小程序中,渲染出城市列表后,如何点击城市,就跳转回到首页,并在首页显示所点击的城市呢? 目录 一、定义点击城市的事件 二、首页的处理 首页:点击成都市会跳转到城市列表 城市列表:点击…...
Linux - nfs服务器
五、nfs服务器 1、基础 NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统 中看来,那个远程主机的目录就好像是自己的一个磁盘分区一样。 由于NFS支持的功能比较多,而不同的功能都会使用不同的程…...
uniapp图片上传预览uni.chooseImage、uni.previewImage
文章目录 1.上传图片2.预览图片 1.上传图片 uni.chooseImage(OBJECT) 从本地相册选择图片或使用相机拍照。 App端如需要更丰富的相机拍照API(如直接调用前置摄像头),参考plus.camera 微信小程序从基础库 2.21.0 开始, wx.choos…...
C++ 字符串中数字识别
【问题描述】 输入一个字符串,含有数字和非数字字符,如“sumabc234;while(abc700)tab{ass346;bssabc267;}”,将其中连续的数字作为一个整数,依次存放到一个数组nums中。例如,234放在nums[0],700放在nums[1…...
学术中常见理论归纳总结-不定期更新
1.信息传播类 1.1 扩散创新理论 创新扩散理论是传播效果研究的经典理论之一,是由美国学者埃弗雷特罗杰斯(E.M.Rogers)于20世纪60年代提出的一个关于通过媒介劝服人们接受新观念、新事物、新产品的理论,侧重大众传播对社会和文化的影响。 1927-1941年进行的“艾奥瓦杂交玉…...
ModelSim怎么修改字体及大小
点击TOOLS 选择PERFERENCES选择下一级菜单的TEXTFONT/CHOOSE/选择字体和大小最后不要忘记点apply再退出...
图片预处理技术介绍4——降噪
图片预处理 大家好,我是阿赵。 这一篇将两种基础的降噪算法。 之前介绍过均值模糊和高斯模糊。如果从降噪的角度来说,模糊算法也算是降噪的一类,所以之前介绍的两种模糊可以称呼为均值降噪和高斯降噪。不过模糊算法对原来的图像特征的…...
Scrapy管道设置和数据保存
1.1 介绍部分: 文字提到常用的Web框架有Django和Flask,接下来将学习一个全球范围内流行的爬虫框架Scrapy。 1.2 内容部分: Scrapy的概念、作用和工作流程 Scrapy的入门使用 Scrapy构造并发送请求 Scrapy模拟登陆 Scrapy管道的使用 Scrapy中…...
D84【python 接口自动化学习】- pytest基础用法
day84 pytest常用断言类型 学习日期:20241130 学习目标:pytest基础用法 -- pytest常用断言类型 学习笔记: 常用断言类型 代码实践 def test_assert():assert 11assert 1!2assert 1<2assert 2>1assert 1>1assert 1<1assert a…...
如何正确书写sh文件/sh任务?bash任务
正确书写xx.sh文件的方式为: source /usr/local/miniconda3/bin/activate condaEnv export CUDA_VISIBLE_DEVICES0 cd /hy-tmp/test export PYTHONPATH"xxx:$PYTHONPATH" python AAA.py python BBB.py python CCC.py 直接运行: bash xx.sh 即可…...
多线程篇-5--线程分类(线程类型,springboot中常见线程类型,异步任务线程)
常见的线程类型包括用户线程(User Threads)、守护线程(Daemon Threads)、主线程(Main Thread)、工作线程(Worker Threads)和线程池中的线程。 一、用户线程(User Thread…...
docker快速部署gitlab
文章目录 场景部署步骤默认账号密码效果 场景 新增了一台机器, 在初始化本地开发环境,docker快速部署gitlab 部署步骤 编写dockerfile version: 3.7services:gitlab:image: gitlab/gitlab-ce:latestcontainer_name: gitlabrestart: alwayshostname: gitlabenviron…...
C# 数据类型详解:掌握数据类型及操作为高效编码奠定基础
本文将带你深入了解C#中各种数据类型的特点、用途和最佳实践,让你不仅能熟练运用基本类型,还能掌握如何在实际项目中做出最合适的选择。 目录 C#基本语法 C#数据类型 C#类型转换 C#变量常量 C#基本语法 在学习C#之前我们要先知道C#的基础构建是由哪些…...
burp2
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...
[ACTF2020 新生赛]BackupFile--详细解析
信息搜集 让我们寻找源文件,目录扫描: 找到了/index.php.bak文件,也就是index.php的备份文件。 后缀名是.bak的文件是备份文件,是文件格式的扩展名。 我们访问这个路径,就会直接下载该备份文件。 我们把.bak后缀删掉…...
循环神经网络(RNN)简述
RNN及其变体 1、概述 (一)、概念 RNN(Recurrent Neural Network), 中文称作循环神经网络, 它一般以序列数据为输入, 通过网络内部的结构设计有效捕捉序列之间的关系特征, 一般也是以序列形式进行输出。 RNN的循环机制使模型隐层**上一时间步产生的结果, 能够作为当下时间步…...
九、Ubuntu Linux操作系统
一、Ubuntu简介 Ubuntu Linux是由南非人马克沙特尔沃思(Mark Shutteworth)创办的基于Debian Linux的操作系统,于2004年10月公布Ubuntu是一个以桌面应用为主的Linux发行版操作系统Ubuntu拥有庞大的社区力量,用户可以方便地从社区获得帮助其官方网站:http…...
SpringBoot 新冠密接者跟踪系统:校园疫情防控的智能守护者
摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古…...
pdf2htmlEX高级调试技术:汇编级调试与反汇编
pdf2htmlEX高级调试技术:汇编级调试与反汇编 【免费下载链接】pdf2htmlEX Convert PDF to HTML without losing text or format. 项目地址: https://gitcode.com/gh_mirrors/pd/pdf2htmlEX pdf2htmlEX是一款能够将PDF文件转换为HTML格式同时保持文本和格式完…...
Wonder3D:重新定义单图3D建模的革命性AI技术
Wonder3D:重新定义单图3D建模的革命性AI技术 【免费下载链接】Wonder3D Single Image to 3D using Cross-Domain Diffusion 项目地址: https://gitcode.com/gh_mirrors/wo/Wonder3D 想象一下,你拍了一张猫咪的照片,几分钟后就能获得一…...
NVIDIA显卡在WSL2下的CUDA开发环境搭建:为什么我的nvcc命令找不到?
NVIDIA显卡在WSL2下的CUDA开发环境搭建:为什么我的nvcc命令找不到? 当你在WSL2中兴奋地准备开始CUDA开发时,却遭遇了"nvcc: command not found"的报错,这种挫败感我深有体会。作为在WSL2环境下进行CUDA开发的老手&…...
Umi-OCR批量文字识别终极指南:免费离线OCR工具快速上手
Umi-OCR批量文字识别终极指南:免费离线OCR工具快速上手 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件,适用于Windows系统,支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/Git…...
CCS12.3.0保姆级教程:手把手教你为AWR6843AOP毫米波雷达新建工程(附完整配置参数)
CCS12.3.0零基础实战指南:AWR6843AOP毫米波雷达工程搭建全解析 第一次打开Code Composer Studio 12.3.0时,满屏的选项和参数确实容易让人望而生畏。特别是当你要为TI的AWR6843AOP毫米波雷达创建新工程时,那些关于Cortex R、DSP C67XX、mss/ds…...
Mac 系统高效安装 ChatGPT 全攻略:从环境配置到性能优化
在 Mac 上折腾 ChatGPT 的安装,尤其是想跑个本地化的 CLI 工具或者集成到自己的项目里,相信不少朋友都踩过坑。原生安装方式看似简单,但 Python 版本管理混乱、依赖包冲突、系统权限问题,常常让一个简单的 pip install openai 变成…...
FPGA音频播放器避坑指南:WM8731 I2C配置与左对齐时序的那些坑
FPGA音频播放器避坑指南:WM8731 I2C配置与左对齐时序的那些坑 第一次听到自己设计的FPGA音频播放器发出刺耳的噪音时,我盯着示波器上扭曲的波形陷入了沉思。作为嵌入式开发者,我们总在数字与模拟的交界处行走,而WM8731这颗看似简单…...
摆脱论文困扰!!2026最新AI论文写作软件测评与推荐
2026年真正好用的AI论文写作软件,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 …...
提示词工程完全指南
提示词工程完全指南 Prompt Engineering Complete Guide 来源参考:OpenAI 官方指南、DAIR.AI Prompt Engineering Guide、IBM、Google Research、斯坦福 CS224N 整理用于学习交流 目录 什么是提示词工程六大核心策略(OpenAI 官方)基础技巧进…...
VibeVoice语音合成快速入门:Web应用搭建,支持音频文件保存
VibeVoice语音合成快速入门:Web应用搭建,支持音频文件保存 1. 引言:为什么选择VibeVoice? 想象一下,你正在开发一个需要语音交互的应用,或者需要为大量文本内容生成有声版本。传统语音合成方案要么延迟高…...
