问题描述
由于安全问题,有的项目需要在内网开发(无法连接外网),因此无法下载相关的 maven 依赖,导致项目无法编译启动。这个很多开发都遇到过,特别是涉及政务、军队的项目,安全级别高,都是专网开发的。
以前我们项目都是在内网搭建maven私服的,使用起来更加规范,特别适合团队协作开发。
在内网搭建 Maven 私服来解决这个问题,参考:
使用Nexus搭建Maven私服教程(附:配置并使用私服教程):
如果觉得搭建私服麻烦的话,或者暂时没有条件或环境的,还有更简单的方法,就是直接将在外网下载好的 maven 依赖拷贝到内网使用。目前接手的一个证券项目就是这个情况,网上资料很多,比较杂乱,没有很详尽的。我照着做,各种问题解决,花了不少功夫才搞定。
现在趁热把实践的最优路径和注意事项整理分享给大家。
迁移步骤
(1)仓库打包(外网)
首先将相关的 maven 依赖在外网的环境中下载好,然后将整个 repository 打包后拷贝到内网的机器上并解压:

最好是选择新的maven仓库地址,重新构建,这样没有冗余的其他项目的包,文件小方便传输。
(2)settings 文件配置(内网)
bash
<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">
<!--这里只写一个本地仓库路径!统一用 D:/software/apache-maven-3.9.16/repository -->
<localRepository>D:/software/apache-maven-3.9.16/repository</localRepository>
<mirrors>
<!--全部镜像删掉!一个都不要留-->
</mirrors>
<profiles>
<!--所有 profile 全部清空,不要任何 repositories / pluginRepositories -->
</profiles>
<activeProfiles>
</activeProfiles>
</settings>
网上说,可以将外网的 settings 文件也拷贝到内网使用,或者也可以将内网 settings 文件中的镜像配置部分改成和外网一样。如果是自己迁移没有问题,如果依赖仓库来自别人配置起来就比较复杂。
(3)仓库文件处理(内网)
在内网解压repo.zip,确认整个仓库把 _remote.repositories、*.lastUpdated 删除干净。
打开 cmd,进入仓库根目录:
cmd
bash
cd D:\software\apache-maven-3.9.16\repo
del /s _remote.repositories
del /s *.lastUpdated
如果是Maven 3.9.x,还需要删除所有的:maven-metadata*.xml。
del /s maven-metadata*.xml
也可以使用文件管理器的搜索功能,全选搜索项,右键删除。
然后在文件夹右上角搜索,**确认一个都搜不到,**只要还有一个残留Maven 就可能触发来源校验编译不过。
(4)父 pom 必须写死全部插件版本
即使前面都修好,离线模式下 Maven 不会自动解析插件版本 ,父 pom 里 pluginManagement 必须写死:
bash
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.4.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version>
</plugin>
</plugins>
</pluginManagement>
子模块引用插件时不用写 version。
注意这里的插件对应的版本version,必须是仓库里面已经有的。如果version不对,可能编译报错(依赖包不存在,不同的插件对应的子依赖版本不一样),这个时候最优解是调整version版本,而不是去下载新的依赖。
(5)在IDEA配置Maven
最后打开 IDEA 的 Maven 设置,配置好本地仓库地址和 settings 文件地址,并勾选上 Work offline (离线模式),这样就完成 Maven 的离线配置了。

如果编译报错,找不到原因。可以在命令行执行,排除 IDEA 缓存干扰:
cmd
mvn clean compile -o
-o 代表离线。
如果命令行能跑通、IDEA 不行 → 一定是 IDEA 里 settings 没选对或者缓存没清干净。
(6)刷新maven仓库配置
如果还不行可以点击 reimport 按钮刷新一下 maven 的依赖,然后依赖就可以导入进来了。

我是加贝哥,十八年IT老兵,「猿in」GZH主理人, 「开源AI知识库」作者,前G厂程序员/架构/产研经理,AI进化派,一线OPC创业者。
我的「OPC成长知识库」,主要分享自媒体/IP学习总结,实践心得,以及一人公司(OPC)内容库运营相关经验,伙伴儿们可以免费关注订阅。
本文内容纯属干货,建议收藏备用。有相关需求的伙伴,可以参考这个迁移步骤。预祝,一次功成!