Java打包时,本地仓库有jar 包,Maven打包却还去远程拉取

Java打包时,本地仓库有jar 包,Maven打包却还去远程拉取

问题描述

在日常开发工作中,总会用到Maven 打包的场景,在maven 打包时,理论上对于本地不存在的包,Maven 会自动从远程拉取指定版本号的最新包。如果本地存在包,Maven 则不会从远程拉取指定版本号的包。但是在实际工作中,有这样一个场景:通过Maven 从远程仓库拉取 jar 包时受限于种种原因(权限、网络等)不能拉取,这个时候通过其他方式(从别的同事那里拷贝、其他途径下载好jar包)已经获取到对应的 jar 包,放入Maven 仓库后,Maven 打包时仍然提示找不到包或者没有权限问题。

问题处理

对于这种情况,如果你确定你的maven 本地仓库地址正确,并且对应的文件目录下也确实有你需要的jar 包,针对这种情况,一种方案是你可以通过设置来指定maven 打包时离线打包。在 IntelliJ IDEA 打开【File】-【Settings】,输入 maven 搜索 Maven 配置,沟勾选【Work offline】 并 应用

通常情况下,这种解决方案就可以了。但是有时候也不好使,这个时候就可以采用第二种方案。可以将你本地仓库依赖包中 jar 包的文件夹下面的_remote.repositories 和 以.lastUpdated结尾的文件 的文件删除,删除之后再次重新通过Maven 打包命令打包就可以了

那么为什么会有这两个文件呢?是因为 Maven使用这些文件来管理本地仓库和远程仓库之间的同步。它们帮助Maven记住每个依赖的来源以及最后一次尝试更新的时间,从而避免不必要的网络请求,提高构建效率。

其中 :

_remote.repositories文件:

这个文件记录了该依赖是从哪个远程仓库下载的。当Maven在本地仓库中查找依赖时,它会检查这个文件以确定该依赖的来源。

.lastUpdated文件:

这个文件记录了Maven最后一次尝试从远程仓库更新该依赖的时间戳。

文件内容示例:包含了一些元数据,比如最后一次更新的时间、尝试更新的结果等。

当Maven检查依赖更新时,它会根据更新策略(如每天检查一次)和这个文件中的时间戳来决定是否去远程仓库检查更新。

如果Maven在下载依赖时失败,也会生成这个文件,并且会在一定时间间隔后重试(避免频繁请求远程仓库)。

关于Maven 的其他命令

这里我们再说一下 Maven 的一些日常命令。

删除本地历史的打包文件

bash 复制代码
mvn clean

执行打包命令

bash 复制代码
mvn clean package

当本地项目有Test 文件的话,在打包执行命令时可以指定跳过 Test 文件。

跳过测试执行,但编译测试类:使用 -DskipTests 参数

bash 复制代码
mvn clean package -DskipTests

跳过测试的编译和执行:使用 -Dmaven.test.skip=true 参数。这会完全忽略测试相关环节,打包速度更快

bash 复制代码
mvn clean package -Dmaven.test.skip=true

好了,经常用的Maven 打包命令基本上就上面两种情况了。

相关推荐
开开心心就好34 分钟前
课堂随机点名工具,绿色版免安装双击即用
java·服务器·前端·ffmpeg·音视频·perl·symfony
code2cat39 分钟前
Java高级篇之Socket:从建立连接到完整收发一条消息
java·开发语言
PD我是你的真爱粉1 小时前
成熟Agent系统设计深度研究报告
java·大数据·人工智能
鶴哥只手遮天1 小时前
Spring AI Alibaba 深度技术系列-第 05 章 编译与执行引擎:CompiledGraph、GraphRunner与三段式 Executor
java·人工智能·开源
开开心心_Every2 小时前
免费压缩软件WinRAR无弹窗、广告干扰
java·开发语言·前端·spring·智能手机·word·winrar
计算机毕设定制辅导-无忧学长2 小时前
《基于微信小程序的个人智能刷题助手的设计与实现》
java·spring boot·mysql·微信小程序·uniapp·个人智能刷题助手系统
步行cgn2 小时前
Spring MVC 中实现 request 域效果的几种方式
java·后端
Thomas.Sir2 小时前
第3课:SpringBoot4.x 自动配置原理:@EnableAutoConfiguration底层源码剖析
java·spring boot
Rain的Java大神之路2 小时前
MySQL 被高并发打爆?从定位到分库分表逐层拆解(含秒杀库存实战)
java·后端·面试
cc_瀚海知行2 小时前
工具调用 6|助手什么时候该停下来?
java·服务器·前端·人工智能·python·ai