maven项目从外网搬迁至内网-本地仓库(不搭建私服)

问题描述

由于安全问题,有的项目需要在内网开发(无法连接外网),因此无法下载相关的 maven 依赖,导致项目无法编译启动。这个很多开发都遇到过,特别是涉及政务、军队的项目,安全级别高,都是专网开发的。

以前我们项目都是在内网搭建maven私服的,使用起来更加规范,特别适合团队协作开发。

在内网搭建 Maven 私服来解决这个问题,参考:

使用Nexus搭建Maven私服教程(附:配置并使用私服教程):

https://www.hangge.com/blog/cache/detail_2844.html

如果觉得搭建私服麻烦的话,或者暂时没有条件或环境的,还有更简单的方法,就是直接将在外网下载好的 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

最后打开 IDEAMaven 设置,配置好本地仓库地址和 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)内容库运营相关经验,伙伴儿们可以免费关注订阅。

本文内容纯属干货,建议收藏备用。有相关需求的伙伴,可以参考这个迁移步骤。预祝,一次功成!

相关推荐
paopaokaka_luck1 小时前
小学非遗科普平台(AI 非遗科普问答,ECharts学情数据、非遗资源分类与审核,资源收藏下载与学习记录,学习任务发布和作品评分,活动报名签到与统计)
java·人工智能·spring·信息可视化·数据分析·echarts
Yize.2 小时前
Spring Task定时任务全解析:从入门到实战
java·spring
莫陌尛.3 小时前
etcd与Nacos功能及场景对比文档
java
麻瓜code3 小时前
【JUC】并发容器:从线程不安全到阻塞队列
java
许彰午4 小时前
50-18个表单控件
java·低代码·架构
白宇横流学长4 小时前
基于springboot的个人博客系统的设计与实现【源码+文档】
java·spring boot
白远山5 小时前
本地游戏代练源码开发实战:架构设计与核心功能实现指南
java·开发语言·架构·需求分析
wno7045 小时前
Spring Security添加图形验证码
java·后端·spring
曹牧5 小时前
Postman:`Content-Type` 和 `charset`
java