idea如何离线构建Maven项目

需求背景

  • 某银行项目采用封闭式开发,所有代码都运行在内网环境,不可连接互联网
  • 此时,我们将一个标准的maven项目源代码拷贝进内网后,如何让其编译通过?
  • 因为不能连接互联网的maven中央仓库,也可能不能连接阿里云maven仓库,许多开源依赖包都无法拉取到
  • 当然还有可能该银行提供了自己的maven私服,但可能该私服上不存在你的项目所需的所有依赖或对应的版本
  • 这个时候,可能有点手足无措
  • 下面分享下个人的解决方案,欢迎大家指教

情况一:内网环境存在私有仓库,且私有仓库配置了中央仓库可连互联网

  1. 这种情况处理起来比较简单些
  2. 假设私有仓库可能设置了maven的国外镜像仓库或阿里云的镜像仓库
  3. 此时你项目中的绝大部分依赖都可以正常拉取到对应的版本过来
  4. 但是也存在一些特殊的依赖,比如你们公司自己开发的一些其他项目的jar,或者又是一些商业化的组件
  5. 这时,你需要做的就是将你的项目导入到idea后,并配置好maven及settings,右键maven刷新
  6. 视你的网速和项目大小,可能需要5到20分钟不等的时间,idea调用maven插件在下载大量依赖包
  7. 最终,你可能看到这么一份错误列表

  1. 而这里面列的,大概都是互联网仓库里找不到的依赖包了
  2. 此时,推荐你到maven私服上查询并确认下,这些依赖是否确实不存在
  3. 确认无误后,将这些jar包从互联网环境中拿到(这里有很多办法),然后上传到maven私服上,填写对相应的坐标
  4. 上传后,再次本地尝试打包,应该即可正常安装你的模块了
  5. 当然,如果你只想让自己本地可以编译通过,也可以将该包拷贝到你本地的私服目录
  6. 此时在你本地私服目录已经存在了这个依赖的目录了,但是下面没有jar文件

  1. 你只需要将对应的jar包拷贝到此目录下,再次打包即可

情况二:内网有自己的maven私服,但不能连接互联网

  1. 这种情况要麻烦许多,你同样用上面的idea中maven刷新的方式,找到所有找不到的依赖

  1. 这种情况有可能有非常多的jar包都找不到,因为内网私服即便是有对于类型的jar,也不一定版本能匹配上
  2. 找到这些jar包后,一个个手动通过maven私服,上传至私服仓库里
  3. 如果涉及到jar包比较多,这个过程需要耐心,切不可急于求成,盲目修改项目本身依赖,否则可能出现更糟糕的问题
  4. 这种情况下,只能说,传完后再次测试,少了哪些,就传哪些,可能要折腾不少次
  5. 当然,如果你只想让本地通过编译,也可以用情况一描述的方式,将jar包拷贝到本地私服对应目录,也可以解决本地问题
  6. 这里,有人说需要在idea的maven设置中,配置-DarchetypeCatalog=local/internal
  7. 经过我测试,配置与不配置都一样,只要你本地有这个jar,他就会以你本地目录存在的jar优先,不会去私服上拉
  8. 当然如果是那种标记为Snapshots版本的jar,肯能另说,具体要看你项目的pom中,是否配置了版本的更新机制了

情况三:内网环境没有私服,也不具备让你搭建私服的条件

  1. 这种情况是最糟糕的,相当于纯离线开发与编译
  2. 不过这也不难,有两个方案可选
  3. 第一种,看网上教程,idea为maven项目手动导入依赖包,这里推荐此文
  4. 第二种,从外网已可正常编译及运行的本地环境中,将整个本地私服的目录压缩,并拷贝到内网环境(内网的本地仓库,按原结构拷贝过来)

  1. 个人推荐用第二种方案,因为这样做还是保持了maven项目的基本特性
  2. 第二种方案如果你要测试的话,可以点击让项目切换到离线模式,你可以在外网环境中是否可以正常编译,随后再做本地仓库的迁移

  1. 这个方案还有个好处,就是后面开发过程中,需要增加其他依赖包时,可以像普通maven工程一样,添加好依赖,然后将jar包放在对应的本地仓库中即可

最后补充说明:

  • 情况二要注意,因为缺少的是较多的包,有可能缺少了一些关键依赖的pom依赖
  • 举个例子,假设你的spring-boot-starter-parent依赖拉取不到
  • 这种情况下,将导致该pom下的各种间接依赖也找不到
  • 此时,你必须从外网环境中将该pom文件也一并上传到私服上,否则整个项目的依赖也会不完整

  • 所以,有时候缺少的依赖不一定是jar包本身,还有可能是一些packaging类型为pom的中间依赖文件
  • 还有,如果你的项目是一个多模块依赖的项目,在存在内网私服的前提下,要把那些公共依赖包,deploy到私服上
  • 这样做,一是为了团队间协作,二是为了可以在内网服务器构建发布时,CICD平台能够拉取到相关依赖
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值