一个实用的 Maven管理本地小工具

发布时间:2026/10/5 1:42:14

一个实用的 Maven管理本地小工具 目录1 现状1.1 问题一想清除maven本地仓库中的垃圾文件临时解决方案1.2 想将我本地的maven仓库的包上传到私服临时解决方案2 更好的解决2.1 下载m2LocalRepoTools工具包2.2 上传本地 localRepository 包方式一通过配置文件的方式方式二通过命令行方式2.3 清理 localRepository 中指定文件1 现状在使用 Maven 时我们可能会经常与本地仓库和私服仓库打交道。1.1 问题一想清除maven本地仓库中的垃圾文件对于本地仓库因为某些文件位拉取到会在本地仓库的项目目录下产生.lastUpdated后缀的文件有时编译项目时为了更快的重新再次拉取正确的包需要清除这些文件时。IDEA中启用了自动刷新版本复制粘贴时还没有填写完整时就自动刷新下载因为GAV不对本地仓库的目录或包当然也不对。例如本地会出现${xxx.version}的目录。这些目录有时也想清理时。当想在maven编译项目时启用offline 模式时需要清理_remote.repositories文件时。临时解决方案如果是在 Linux 服务可以通过如下的 Shell 命令清除本地仓库下所有的.lastUpdated后缀的文件目录或者其他的文件。因为涉及到删除执行命令时总是小心翼翼生怕命令敲错或者粘贴错误误删某些不可预期的文件而自己又浑然不知。find~/.m2/repository/-regex.*\.lastUpdated|xargsdirname|xargsrm-rf同时如果是 Windows 系统或者其他不支持 Shell 的系统就不得不查找对应系统的查找和清除文件夹的命令了。不同的操作系统执行的命令也不同维护起来十分的不方便此时就非常系统有一个工具能支持多操作系统。1.2 想将我本地的maven仓库的包上传到私服而对于私服如果是公司自己的私服不巧的是公司的 Maven 私服例如 Nexus又无法访问外网在公司内网使用公司私服编译项目时我们期望上传上自己的依赖包此时往往是很多的文件就不得不手动一个一个上传如果动手能力比较强的可以根据对应环境编写一个小脚本执行。此时我们希望有一个更加方便易用、性能又好的工具最好是一个开箱即用的。临时解决方案对于向自己私服发布包的情况一般有两种方式第一种是通过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\-Durlhttp://nexus.yore.cn/repository/maven-releases\-DrepositoryIdyore_nexus-X-Dpackagingjar如果顺利的话非常清爽的成功了但紧接着可能会遇到如下的问题【问题 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 信息是灰色的直接上传即可。2 更好的解决一路走来坑坑洼洼磕磕绊绊细节那么多怎么保证身边其他同事不会一不小心再犯同样的错呢有没有更好的解决方案呢答案肯定是有滴下面来介绍一个实用的工具 m2LocalRepoTools这个项目是使用 go 语言编写的一个 Maven localRepository 工具。支持的操作系统有 Linux、Windows、Mac OSARM和AMD64可以直接指定本地 localRepository 路径即可将此路径下的所有包上传到 Maven 私服上也支持清理 localRepository 中指定后缀的文件。环境要求下载工具开箱即用。2.1 下载m2LocalRepoTools工具包使用也非常简单访问 m2LocalRepoTools/releases 虽然有仓库中还有v1.0.0版本单建议使用最新版本。下载编译好的工具包 tools_maven_localRepository-bin.zip解压解压后目录如下m2LocalRepoTools ├── config.yaml.template# configuration template├── README.md# English documentation├── README_CN.md# Chinese documentation├── darwin-amd64/# macOS (Intel)│ └── m2LocalRepoTools ├── darwin-arm64/# macOS (Apple Silicon)│ └── m2LocalRepoTools ├── linux-amd64/# Linux (x86_64)│ └── m2LocalRepoTools ├── linux-arm64/# Linux (ARM64)│ └── m2LocalRepoTools ├── linux-arm/# Linux (ARM)│ └── m2LocalRepoTools ├── windows-amd64/# Windows (x86_64)│ └── m2LocalRepoTools.exe └── windows-arm64/# Windows (ARM64)└── m2LocalRepoTools.exe拷贝 settings.xml.template 为 settings.xml简单配置如下信息主要是 servers 中的私服账号信息?xml version1.0 encodingUTF-8?settingsxmlnshttp://maven.apache.org/SETTINGS/1.2.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd!--localRepository/home/yore/.m2/repository/localRepository--pluginGroups/pluginGroupsproxies/proxiesserversserveridyore_nexus/idusernameadmin/usernamepasswordadmin123/password/server/serversmirrorsmirroridyore_nexus/idmirrorOf*/mirrorOfurlhttp://nlocalhost:8081/repository/maven-public/url/mirror/mirrorsprofilesprofileidyore_nexus/idrepositoriesrepositoryidyore_nexus/idnameyore nexus/nameurlhttp://localhost:8081/repository/maven-public/urlreleasesenabledtrue/enabled/releasessnapshotsenabledtrue/enabled/snapshots/repository/repositories/profile/profilesactiveProfilesactiveProfileyore_nexus/activeProfile/activeProfiles/settings2.2 上传本地 localRepository 包方式一通过配置文件的方式拷贝 config.yaml.template 为 config.yaml简单配置如下信息# 是否输出项目的 debug 信息verbose:falselogLevel:INFO# Maven localRepository 本地路径localRepository:~/.m2/repositorypush:# release的私服仓库地址releaseUrl:http://localhost:8081/repository/maven-releases# snapshot的私服仓库地址snapshotsUrl:http://localhost:8081/repository/maven-snapshots# mixed的私服仓库地址releasesnapshot# mixedUrl: http://localhost:8081/repository/maven-mixedusername:adminpassword:admin123worker:4# 忽略或排除的文件excludeSuffixs:-.DS_Store-.asc-.lastUpdated-.md5-.repositories-.sha1-.sha256-.sha512-.xml主要关注如下几个配置localRepository Maven localRepository 本地路径可以是本地仓库任意层级的目录push.mixedUrl mixed类型私服仓库的地址。一个url同时支持release和snapshot根据版本号是否以-SNAPSHOT结尾判断是否为snapshot包。关于push.releaseUrl、push.snapshotsUrl、push.mixedUrl三个至少配置一个。如果三个都配置了则忽略push.mixedUrl地址release包以push.releaseUrl为准snapshot包以push.snapshotsUrl为准。push.worker并行数默认为4如果本地机器性能较好可以适当增大该值来加速上传的速度。同样如果需要输出项目更详细的信息可以将verbose设置为 true如果需要输出 Maven 执行的更详细的信息可以将deploy.debug设置为 true。配置完毕后执行如下命令其中--config指定为上面的配置文件支持相对路径和绝对路径。./m2LocalRepoTools--config./config.yaml push方式二通过命令行方式./m2LocalRepoTools\-repo~/.m2/repository/org/antlr/\-releaseUrlhttp://localhost:8081/repository/maven-releases/\-snapshotsUrlhttp://localhost:8081/repository/maven-snapshots/\-usernameadmin\-passwordadmin123\-worker2\-verbose\push如果需要输出项目更详细的信息可以将verbose设置为 true如果需要输出 Maven 执行的更详细的信息可以将deploy.debug设置为 true。2.3 清理 localRepository 中指定文件当前仅支持通过配置文件的方式。拷贝 config.yaml.template 为 config.yaml简单配置如下信息# 是否输出项目的 debug 信息verbose:falselogLevel:INFO# Maven localRepository 本地路径localRepository:~/.m2/repositoryclean:# 待清理的文件后缀suffixs:-.DS_Store-.lastUpdated# 待清理的文件夹支持正则。dirRegex:-${*.version}主要关注如下几个配置localRepository Maven localRepository 本地路径clean.suffixs 需要清理 localRepository 中的后缀文件列表同样如果需要输出项目更详细的信息可以将verbose设置为 true如果需要输出 Maven 执行的更详细的信息可以将deploy.debug设置为 true。配置完毕后执行如下命令其中--config指定为上面的配置文件支持相对路径和绝对路径。./m2LocalRepoTools--config./config.yaml clean
延伸阅读

更多相关文章

2026/10/5 1:37:13

MRAM工业存储实战:MR25H40CDF与STM32G431RB驱动开发与掉电保护

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 2:37:15

DeepSeek教学反思方案:课堂实录清洗、标注与行为模式挖掘实战

简介:面向教学反思数字化转型需求,这份535页的方案文档以DeepSeek-NLP为技术底座,围绕课堂实录文本自动标注与教学行为模式挖掘展开,适合教育研究者、一线教师、教研人员及NLP应用开发者参考。文档为单个PDF文件,压缩包…

2026/10/5 2:37:15

三甲医院知识库DeepSeek微调与内网部署实战:从文档解析到RAG问答

简介:这份PDF文档面向医疗信息化从业者、AI应用开发者及希望将大模型落地医疗场景的技术人员,系统讲解基于DeepSeek构建三甲医院知识库问答系统的完整实战路径。内容从医疗问答系统的背景意义切入,梳理三甲医院知识库的数据来源与特点&#x…

2026/10/5 2:37:15

YOLOv11边缘部署实战:量化压缩与NPU加速全链路解析

简介:围绕YOLOv11在边缘计算场景中的高效部署需求,这份32页PDF手册系统讲解模型量化压缩与NPU加速的完整技术链路,面向算法工程师、边缘计算开发者及计算机视觉学习者。内容按章节组织,从边缘计算与YOLOv11概述入手,分…

2026/10/5 2:37:15

175种ChatGPT指令模板拆解:提示工程师的工程化实践指南

简介:这份资源是面向AI提示词工程师、内容创作者与对话产品开发者的实战指令合集,围绕ChatGPT等大模型的内容生成能力,整理出175种可直接套用的训练指令模板,帮助使用者解决提示词设计零散、输出质量不稳定、场景覆盖不全等问题。…

2026/10/5 2:37:15

基于Java+SpringBoot+Vue的学生体质健康管理系统毕设实战与避坑指南

简介:这是一套面向高校计算机专业毕业设计的完整资料,主题为基于Java的学生体质健康管理系统,适合正在准备毕设的本科生及需要参考SSM/SpringBoot项目实战的开发者。资源包含论文与源码两部分,论文按绪论、相关技术、系统分析、系…

2026/10/4 0:01:02

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑