文章目录
- 问题
- 解决思路
- 解决办法
- 删除 `_remote.repositories` 文件
- 代码
- 手动操作步骤
- 验证
问题
非互联网环境,无法从中央仓库or镜像里拉取jar包。 服务器上搭建了一套Nexus私服。
Nexus私服故障,无法连接。
工程里新增了一个Jar的依赖, 本地仓库和伺服里都有这个版本的Jar.
奈何默认情况下, IDEA依然从Nexus拉取,导致会产生一个lastUpdated文件,IDEA认为没有拉取下来,工程编译不过
解决思路
在非互联网环境中,如果 Nexus 私服无法连接,而本地仓库和服务器上已经有了所需的 JAR 依赖,可以通过删除本地仓库中的 _remote.repositories
文件,强制 Maven 使用本地仓库中的依赖。
解决办法
删除 _remote.repositories
文件
-
找到本地仓库中的
_remote.repositories
文件
默认情况下,本地 Maven 仓库路径为~/.m2/repository
。在该目录下找到相关依赖的目录,里面可能包含_remote.repositories
文件。 -
删除
_remote.repositories
文件
删除对应依赖目录中的_remote.repositories
文件。例如,对于com.example:example-dependency:1.0.0
依赖,路径可能类似于:~/.m2/repository/com/example/example-dependency/1.0.0/_remote.repositories
-
刷新 Maven 依赖
在 IntelliJ IDEA 中,右键点击项目的pom.xml
文件,然后选择Maven
>Reimport
。或者点击 Maven 工具窗口中的刷新按钮。
代码
写了个Java 方法,用于自动删除本地 Maven 仓库中所有 _remote.repositories
文件:
import java.io.File;public class CleanLocalMavenRepo {public static void main(String[] args) {File mavenLocalRepo = new File(System.getProperty("user.home"), ".m2/repository");// File mavenLocalRepo = new File("D:\\xxx\\repository2")clean(mavenLocalRepo);}/*** 递归清理本地 Maven 仓库,删除所有 "_remote.repositories" 文件。** @param file 要清理的文件或目录。*/private static void clean(File file) {// 检查给定的文件是否是一个目录if (file.isDirectory()) {// 遍历目录中的所有文件和子目录for (File f : file.listFiles()) {// 对每个文件或子目录递归调用 clean 方法clean(f);}} else if (file.getName().equals("_remote.repositories")) {// 如果文件名为 "_remote.repositories"// 打印要删除的文件的绝对路径System.out.println("Deleting: " + file.getAbsolutePath());// 删除该文件file.delete();}}}
手动操作步骤
-
导航到本地仓库目录
cd ~/.m2/repository
-
查找并删除
_remote.repositories
文件
使用以下命令查找并删除所有_remote.repositories
文件:find . -name "_remote.repositories" -exec rm -f {} \;
在 Windows 中,可以使用以下命令来查找并删除所有 _remote.repositories
文件:
del /s /q "_remote.repositories" >nul 2>&1
del
命令用于删除文件。/s
参数指示命令在当前目录及其所有子目录中搜索文件。/q
参数启用安静模式,即删除文件时不提示确认。"*.txt"
指定要删除的文件名模式。在本例中,它将匹配所有名为_remote.repositories
的文件。>nul 2>&1
将命令的输出重定向到空设备,从而隐藏任何输出信息。
请注意: 在执行此命令之前,请确保你位于正确的目录(~/.m2/repository
),因为此命令将删除所有匹配的文件,并且无法恢复。
验证
删除 _remote.repositories
文件后,重新加载 Maven 依赖,确认 IDEA 不再尝试从 Nexus 私服拉取依赖,并成功使用本地仓库中的 JAR 文件。